Login only if user is active using Laravel

前端 未结 19 1856
孤城傲影
孤城傲影 2020-11-30 23:26

I\'m currently working on my Laravel app and to prevent spam I decided that only active users are able to login. I\'m currently using Laravel\'s login system just like in La

19条回答
  •  醉酒成梦
    2020-11-30 23:44

    If someone uses ajax request on login and wants to have custom message, here is how I achieved this in login controller:

    login() function

      // This section is the only change
        if ($this->guard()->validate($this->credentials($request))) {
            $user = $this->guard()->getLastAttempted();
    
            // Make sure the user is active
            if ($user->status == 1 && $this->attemptLogin($request)) {
                // Send the normal successful login response
                return $this->sendLoginResponse($request);
            } else {
                // Increment the failed login attempts and redirect back to the
                // login form with an error message.
                $this->incrementLoginAttempts($request);
                return $this->sendFailedLoginResponse($request, true);
            }
        }
    

    And other functions

     public function sendLoginResponse(Request $request)
    {
        $redirectTo = false;
        if ($request->headers->get('referer') == env('APP_URL') . '/' || $request->headers->get('referer') == env('APP_URL') . '/login') {
            $redirectTo = $this->redirectPath();
        }
    
        if ($request->expectsJson()) {
            return response()->json(['status' => true, 'user' => auth()->user(), 'redirectTo' => $redirectTo, 'fragments' => [
                '#main-nav' => view('includes.nav')->render()
            ]]);
        } else {
            return redirect($redirectTo);
        }
    }
    
    public function sendFailedLoginResponse(Request $request, $user_not_active = fasle)
    {
        if ($user_not_active) {
            return response()->json(['status' => false, 'email' => 'Your account is not active.']);
        }
        return response()->json(['status' => false, 'email' => 'Incorrect login credentials.']);
    }
    

提交回复
热议问题