Войти в систему пользователя, только если его статус активен в Laravel 5.7 - PullRequest
0 голосов
/ 14 декабря 2018

Я новичок в Laravel и довольно успешно внедрил аутентификацию пользователей.Теперь, чтобы перейти к следующему шагу, я должен разрешить только пользователям, чей статус активен, войти в систему.Для этого я добавил столбец

status TINYINT

в мою таблицу пользователей mysql.

Я нашел это в документации Laravel:

Указание дополнительных условий

При желании вы также можете добавить дополнительные условия к запросу аутентификации в дополнение к электронной почте и паролю пользователя.Например, мы можем проверить, что пользователь помечен как «активный»:

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

Может кто-нибудь указать, куда мне нужно поместить этот чанк.Я полностью сбит с толку и нуждаюсь в некоторых указателях.

Спасибо

Ответы [ 5 ]

0 голосов
/ 13 февраля 2019

Вы можете переопределить метод authenticated () в вашем App \ Http \ Controllers \ Auth \ LoginController.php следующим образом:

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

Обратите внимание, что это быстрое, но не очень "Laravely" решение.Слоппи.

0 голосов
/ 14 декабря 2018

Имейте это на вашем LoginController:

protected function credentials(Request $request)
{        
   return ['username' => $request->{$this->username()}, 'password' => $request->password, 'status' => 1];
}
0 голосов
/ 14 декабря 2018

Просто вставьте этот код в 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');
    }
}

с этим кодом вы переопределяете значение по умолчанию authenticate function

0 голосов
/ 14 декабря 2018

Добавьте метод ниже в

app \ Http \ Controllers \ Auth \ LoginController.php

, и он будет расширяться

AuthenticatesUserstrait

validateLogin метод.Таким образом, в основном, это проверило бы и ваше активное предложение.

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

ИЛИ

Поместите нужный код в 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.
    }
}
0 голосов
/ 14 декабря 2018

Вы просто принимаете статус пользователя и проверяете статус пользователя как истинный или ложный.Вы можете получить статус, используя 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.');
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...