我在laravel中使用Jwt auth:“ tymon / jwt-auth”:“ 0.5。*”。我需要在API的登录调用中添加一个检查,以检查用户电子邮件是否已验证。如果未验证,则返回错误消息。
我找不到它的代码。 “ oauth /令牌” API调用在哪里?
我找不到代码,因此无法在其中集成该检查。
答案 0 :(得分:1)
我也面临着类似的难题,并且没有直接解决方案,因此在auth
attempt
之后,我添加了自己的方法/逻辑来进行检查。
这是示例代码。
public function login(Request $request)
{
try
{
$credentials = $request->only(['email', 'password']);
if (!$token = auth()->attempt($credentials))
{
return response()->json(['error' => 'invalid credentials'], 401);
}
//if you reached here then user has been authenticated
if (empty(auth()->user()->email_verified_at))
{
return response()->json(['error' => 'Your have not verified your email.'], 401);
}
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60
], 200);
}
catch (JWTException $e)
{
// something went wrong whilst attempting to encode the token
return response()->json(['error' => 'could not create token'], 500);
}
}
请注意:在上面的示例中,我使用了 tymon/jwt-auth v1.0
和 Laravel v7
希望这会有所帮助!
答案 1 :(得分:0)
我可以指导您如何实现。在用户表中的第一个添加列,例如“已确认”,并将其添加到用户模型的可填充列中。该列默认为0或false,而'validation_string'默认为null。在用户注册后,向他发送指向其邮件的链接。当他单击链接时,他将访问您的网站链接,您会将validation_string设置为null,并且该用户有效。当他登录时,他将获得JWT令牌,但在您生成他令牌之前,以及在验证用户名/带有密码的电子邮件之后,请检查“确认”为1还是true。那就是:)
答案 2 :(得分:0)
这将验证输入的数据,尝试登录,然后检查其电子邮件验证状态。
注意-我正在使用自定义帮助方法进行响应。
/**
* Get a JWT via given credentials.
*
* @return \Illuminate\Http\JsonResponse
*/
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email:filter',
'password' => 'required|string|min:8',
]);
if ($validator->fails()) {
return $this->responseUnprocessable($validator->errors());
}
if (! $token = auth()->attempt($validator->validated())) {
return $this->responseUnauthorized();
}
if (! auth()->user()->hasVerifiedEmail()) {
return $this->responseForbidden('Please verify your email address before logging in. You may request a new link here [xyz.com] if your verification has expired.');
}
return $this->createNewToken($token);
}