所以我在laravel中构建了一个API,现在是时候进行身份验证了。我已经安装了https://github.com/tymondesigns/jwt-auth并创建了一个登录此方法的登录路线:
public function authenticate(Request $request)
{
// grab credentials from the request
$credentials = $request->only('email', 'password');
try {
// attempt to verify the credentials and create a token for the user
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(compact('token'));
}
这里的问题是,即使我已经给了JWTAuth ::尝试正确的凭据,它仍然说它们是无效的。当我查看被调用的查询时,它直接通过我的电子邮件和密码并以这种方式搜索用户。这显然不起作用,因为我不使用纯文本密码。所以我以与旧数据库相同的方式对密码进行了调整,但仍然没有问题,因为散列是一种单向散列,每次都会有所不同。
TL; DR;
预期事件:JWTAuth ::尝试使用电子邮件获取用户并检查返回的加密密码与给定的密码并返回令牌
实际事件:JWTAuth ::尝试尝试使用电子邮件和密码来抓取用户,但由于我没有存储明文密码,因此无法检索用户。然后,这会触发无效的凭证响应