Tymon JWT использует провайдера базы данных вместо красноречивого

я использую https://github.com/tymondesigns/jwt-auth на моем приложении люмена.

Вот мой composer.json

"laravel/lumen-framework": "5.3.*",
"tymon/jwt-auth": "^1.0@dev",

Я прочитал учебники о том, как установить. Некоторые из которых:

Я могу заставить его работать на моем локальном компьютере и успешно вернуть токен. Но проблема в том, что вместо использования eloquent на провайдере, который извлекает данные из database.sqliteЯ хочу использовать базу данных в качестве моего драйвера.

С этим я установил

'providers' => [
'users' => [
'driver' => 'database',
'table'  => 'user_table',
// 'driver' => 'eloquent',
// 'model' => App\User::class,
],
],

на моем config/auth.php

Так как теперь это соединение через базу данных, теперь он использует DatabaseUserProvider.php

Мне нужно изменить некоторые коды, хотя.

/**
* Validate a user against the given credentials.
*
* @param  \Illuminate\Contracts\Auth\Authenticatable  $user
* @param  array  $credentials
* @return bool
*/
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];

return $this->hasher->check($plain, app('hash')->make($user->getAuthPassword()));
}

Обратите внимание, что я добавил app('hash')->make() при проверке пароля.

Затем он вставляет найденного пользователя в GenericUser объект.

/**
* Get the generic user.
*
* @param  mixed  $user
* @return \Illuminate\Auth\GenericUser|null
*/
protected function getGenericUser($user)
{
if (! is_null($user)) {
return new GenericUser((array) $user);
}
}

Так как это на GenericUser объект, он дает ошибку:

Argument 1 passed to Tymon\JWTAuth\JWT::fromUser() must be an instance of Tymon\JWTAuth\Contracts\JWTSubject, instance of Illuminate\Auth\GenericUser given

Чтобы это исправить, я должен взломать его, удалив JWTSubject инъекция на каждый метод под tymon\jwt-auth\src\JWT.php

Есть ли лучший способ убрать это?

0

Решение

Вы можете легко исправить это, заставив вашего аутентифицирующего пользователя реализовать JWTSubject, что является наиболее правильным решением.

class GenericUser implements JWTSubject {
[...]
}

Но, поскольку вы имеете дело с нативной реализацией Laravel, я бы предложил вам расширить ее и реализовать JWTSubject, вместо того, чтобы переходить повсюду в коде jwt-auth и удалять подсказки типов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]