我想知道如何在 Laravel 5.6 中使用 Cartalyst Sentinel 2.0 身份验证包实现 tymon jwt 1.0.0 rc2,以利用节流和其他 Sentinel 功能。
在 AuthController 内部,我有 jwt-auth 文档中提到的 login() 方法,在此处输入链接描述以验证凭据并生成令牌。
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。这对性能不利。
第二种解决方法是修改位于 vendor/tymon/jwt-auth/src 文件夹中的 JWTGuard 类中的尝试()方法。
默认如下
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;
}
我现在不知道这是否是一个正确的解决方案?