2017-02-07 18 views
0

Я использую https://github.com/tymondesigns/jwt-auth на моем приложении освещения.Tymon JWT, используя базу данных провайдера вместо красноречивого

Вот мой composer.json

"laravel/lumen-framework": "5.3.*", 
"tymon/jwt-auth": "^[email protected]", 

Я прочитал руководств по установке. Некоторые из них являются:

Я могу заставить его работать на моем местном и успешно возвращает маркер. Но проблема в том, что вместо использования красноречивого на провайдере, который извлекает данные из 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 и удалить тип-подсказку.