仅当用户在Laravel 5.7中处于活动状态时才登录

时间:2018-12-14 13:34:30

标签: php laravel laravel-5.7

我是Laravel的新手,在实现用户身份验证方面相当成功。现在,进入下一步,我必须仅允许处于活动状态的用户登录。为此,我添加了一个

status TINYINT

我的mysql用户表中的列。

我在Laravel文档中找到了这个

  

指定附加条件

     

如果您愿意,还可以在身份验证中添加其他条件   除了用户的电子邮件和密码外,还进行查询。例如,我们   可以验证用户被标记为“活动”:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}

有人可以指出我需要在哪里放置这一部分。十分困惑,需要一些指导。

谢谢

6 个答案:

答案 0 :(得分:3)

在您的LoginController上放置它:

const activeNumbers = [1, 2, 3, 7, 8, 9, 10, 16, 17, 18, 19, 20];

function getNumberText($elt) {
    return parseInt($elt.text(), 10);
}

function isActiveNumber(n) {
    return activeNumbers.includes(n);
}

function updateActiveClass(elt) {
    const $elt = $(elt);
    const n = getNumberText($elt);
    $elt.toggleClass('active', isActiveNumber(n));
}

function highlightActiveCells(selector) {
    $(selector).find('td').each(function () { updateActiveClass(this); });
}

highlightActiveCells('table'); // or a better selector, like a class or id

答案 1 :(得分:2)

您只需要获取用户状态并检查用户状态为真还是假。您可以通过Auth会话使用Auth :: User()-> status获取状态。尝试这个。

 if(Auth::attempt(['email'=>$request->email,'password'=>$request->password])){
                $userStatus = Auth::User()->status;
                if($userStatus=='1') {
                    return redirect()->intended(url('/dashboard'));
                }else{
                    Auth::logout();
                    Session::flush();
                    return redirect(url('login'))->withInput()->with('errorMsg','You are temporary blocked. please contact to admin');
                }
            }
            else {

                return redirect(url('login'))->withInput()->with('errorMsg','Incorrect username or password. Please try again.');
            }

答案 2 :(得分:2)

只需将这段代码放在您的getContextData或您App\Auth\LoginController所在的其他地方即可。

LoginController

使用此代码,您将覆盖默认的public function authenticate(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { // Authentication passed... return redirect()->intended('dashboard'); } } 函数

答案 3 :(得分:0)

中添加以下方法
  

app \ Http \ Controllers \ Auth \ LoginController.php

它将扩展

  

AuthenticatesUsers特性

validateLogin方法。因此,基本上,它也会检查您的活动子句。

protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => [
                'required',
                Rule::exists('users')->where(function ($query) {
                    $query->where('active', 1);
                }),
            ],
            'password' => 'required'
        ]);
    }

OR

将所需的代码放入 app \ Http \ Controllers \ Auth \ LoginController.php

public function authenticate(Request $request)
{
    if (Auth::attempt(['email' => $request->email, 'password' => $request->password, 'active' => 1])) {
        // The user is active, not suspended, and exists.
    }
}

答案 4 :(得分:0)

您可以像下面这样在App \ Http \ Controllers \ Auth \ LoginController.php中覆盖authenticated()方法:

protected function authenticated(Request $request, $user)
{
   if(!$user->active) {
       Auth::logout();
       abort(403);
   };
}

请注意,这是快速的解决方案,但不是很“轻松”的解决方案。马虎。

答案 5 :(得分:0)

将此添加到您的LoginController中:

protected function credentials(Request $request)
{        
    return [$this->username() => $request->{$this->username()}, 'password' => $request->password, 'active' => 1];
}