Laravel和jwt-auth。如何检查用户电子邮件是否已验证

时间:2018-11-30 21:02:16

标签: php laravel api jwt

我在laravel中使用Jwt auth:“ tymon / jwt-auth”:“ 0.5。*”。我需要在API的登录调用中添加一个检查,以检查用户电子邮件是否已验证。如果未验证,则返回错误消息。

我找不到它的代码。 “ oauth /令牌” API调用在哪里?

我找不到代码,因此无法在其中集成该检查。

3 个答案:

答案 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);
    }