я использую 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
Есть ли лучший способ убрать это?
Вы можете легко исправить это, заставив вашего аутентифицирующего пользователя реализовать JWTSubject, что является наиболее правильным решением.
class GenericUser implements JWTSubject {
[...]
}
Но, поскольку вы имеете дело с нативной реализацией Laravel, я бы предложил вам расширить ее и реализовать JWTSubject, вместо того, чтобы переходить повсюду в коде jwt-auth и удалять подсказки типов.
Других решений пока нет …