如何仅检查(状态)活动用户可以登录-JWT Auth-Laravel

Posted

技术标签:

【中文标题】如何仅检查(状态)活动用户可以登录-JWT Auth-Laravel【英文标题】:How to check only (status)active user can able to login- JWT Auth -Laravel 【发布时间】:2021-12-03 00:27:37 【问题描述】:

我已经在https://www.avyatech.com/rest-api-with-laravel-8-using-jwt-token/ 的帮助下实现了 JWT 令牌认证

第 11 步。准备 api 控制器操作 -> authenticate()

现在,系统管理员允许用户记录标记为活动/非活动(状态)并且非活动用户应该无法登录到系统

登录逻辑:

        public function authenticate(UserRequest $request)
     
    $credentials = $request->only('email', 'password');
    $request->validated();

    //Request is validated
    try 
        if (!$token = JWTAuth::attempt($credentials)) 
            $message = 'Login credentials are invalid.';
            $data = [];
            return response()->failed($message, $data);
        
     catch (JWTException $e) 
        return $credentials;
        return response()->json([
            'status' => false,
            'message' => 'Could not create token.',
            'error' => $e
        ], 500);
    
    //Token created, return with success response and jwt token
    $message = 'Successfully login.';
    $data = [
        'token' => $token
    ];
    return response()->success($message, $data);

表格:

User
---------------
-id
-username
-email
-password
-status // active/inactive

我需要包含哪些步骤才能实现此逻辑?非活动用户不得登录系统

非常感谢!

【问题讨论】:

【参考方案1】:

在返回响应之前获取用户并抛出错误:

public function authenticate(UserRequest $request)

    // ...

    $user = User::where('email', $credentials['email'])->first();

    if($user === null || $user->status !== 'active') 
        $message = 'Your account is not active.';
        $data = [];
    
        return response()->failed($message, $data);
    

    $message = 'Successfully login.';
    $data = [
        'token' => $token
    ];

    return response()->success($message, $data);

【讨论】:

感谢您的帮助!这行得通:) @Emma Your Wellcome,您可以接受适用于该社区的其他人寻求解决方案的答案。 @a-seddighi 完成!

以上是关于如何仅检查(状态)活动用户可以登录-JWT Auth-Laravel的主要内容,如果未能解决你的问题,请参考以下文章

如何判断用户是不是使用仅限 http 的 cookie 和 JWT 登录(客户端)

如何在 iOS 和 Android 的给定时间检测用户是不是仅在一台设备上处于活动状态

Django JWT Auth 和 Vue:如何检查用户是不是登录 Vue?

使用 JWT 令牌使用 AdonisJS 注销

node js jwt如何将令牌传递给其他路由以稍后检查登录的用户信息

使用 Session ID 检查会话是不是处于活动状态 - Laravel