Мне интересно, как реализовать tymon jwt 1.0.0 rc2 с пакетом аутентификации Cartalyst Sentinel 2.0 в Laravel 5.6, чтобы воспользоваться преимуществами регулирования и другими функциями Sentinel.
Внутри AuthController У меня есть этот метод login (), как упомянуто в документах jwt-auth введите здесь описание ссылки , чтобы проверить учетные данные и сгенерировать токен.
public function login()
{
$credentials = request(['email', 'password']);
if (! $token = auth()->attempt($credentials))
return response()->json(['error' => 'Unauthorized'], 401);
return $this->respondWithToken($token);
}
Что я сделал, это следующее
public function login()
{
$credentials = request(['email', 'password']);
if (! Sentinel::authenticate($credentials))
return response()->json(['error' => 'Unauthorized'], 401);
$token = auth()->attempt($credentials);
return $this->respondWithToken($token);
}
Но я не думаю, что это правильный путь, потому что существует двойная аутентификация, сначала Sentinel, а затем jwt. и это плохо для производительности.
И второй обходной путь - изменить метод try () внутри класса JWTGuard, который находится в папке vendor / tymon / jwt-auth / src.
по умолчанию следующее
public function attempt(array $credentials = [], $login = true)
{
$this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);
if ($this->hasValidCredentials($user, $credentials)) {
return $login ? $this->login($user) : true;
}
return false;
}
и я изменил это так
public function attempt(array $credentials = [], $login = true)
{
if ($user = Sentinel::authenticate($credentials)) {
return $this->login($user);
}
return false;
}
Не знаю, правильное ли это решение или нет?