2016-05-27 5 views
1

В моей модели пользователя у меня есть поле статуса. Я только хочу разрешить пользователям со статусом «active» для входа в систему. Я думал о создании пользовательского Validator в AppServiceProvider, но не знаю, где его использовать, когда пользователь входит в систему.Пользовательская аутентификация пользователя в Laravel 5.2

Могу ли я перезаписать логин () или validateLogin() из атрибута AuthenticatesUsers()?

Любая помощь оценена!

ответ

2

В исходном коде признака (you can see it here) Я вижу:

$credentials = $this->getCredentials($request); 

    if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) { 
     return $this->handleUserWasAuthenticated($request, $throttles); 
    } 

Вы можете передать массив учетных данных для метода попытки.

Итак, все, что вам нужно сделать, это передать фиксированное значение вместе с остальными данными запроса.

Просто сделать пример, если в этот момент вы передаете

['email' => '[email protected]', 'password' => 'my-password'] 

теперь будет необходимо пройти

['email' => '[email protected]', 'password' => 'my-password', 'status' => 'active'] 

или любое значение, вам нужно :)

Надеюсь, поможет!

+0

Благодарим за быстрый ответ! Я немного смущен тем, где положить массив. Я использовал команду artisan для выравнивания всех маршрутов/контроллеров auth. Я могу видеть только create() и validate() в контроллере Auth, но это относится только к регистрации пользователей? – sjhuda

+0

Вы можете просто переписать метод, который вам нужен в вашем классе ... в этом случае «login», потому что ваша реализация будет иметь [приоритет над признаком] (http://php.net/manual/en/language .oop5.traits.php) (см. пример # 3) –

+0

Да, спасибо. Я закончил делать что-то подобное после разговора с коллегой. Я добавил 'validateLogin' к моему контроллеру и добавил пользовательский валидатор к имени пользователя. Итак, я закончил с '$ this-> loginUsername() => 'required | active''. Затем сбросил мой пользовательский валидатор в 'AppServiceProvider'. Спасибо за вашу помощь. – sjhuda

0

Вы можете переопределить getCredentials в своем AuthController, чтобы не прикладывать никаких корректировок к этому большому методу login, если хотите.

protected function getCredentials(Request $request) 
{ 
    return $request->only($this->loginUsername(), 'password') + ['status' => 'active']; 
    // return an array with all the default credentials and adding 'status' 
} 

Для настройки проверки вы можете переопределить validateLogin.

protected function validateLogin(Request $request) 
{ 
    $this->validate($request, [ 
     $this->loginUsername() => 'required', 'password' => 'required', 
    ]); 
    // adjust as needed 
} 
Смежные вопросы