Авторизация Laravel 5.5, предоставление дополнительных учетных данных, вызов метода retrieveByCredentials ()

Обновление с 4.2. Я пытаюсь подключиться к модели авторизации 5.5, и (как и многие другие) требуют дополнительных полей (учетные данные). Большинство людей, кажется, просто обходят структуру аутентификации. Мы бы предпочли «сделать это правильно», так сказать, и оставаться полностью интегрированными в функции аутентификации, предоставляемые Laravel.

Но я не знаю, как позвонить retrieveByCredentials ($ массив) в контексте входа в систему.
(для API документов см .: https://laravel.com/api/5.5/Illuminate/Auth/EloquentUserProvider.html#method_retrieveByCredentials )

Итак, можете ли вы помочь мне с тем, что ИСПОЛЬЗОВАТЬ, и как вызвать метод?

-Спасибо


Для людей, которые хотят знать, добавьте учетные данные, переопределив черту AuthenticateUsers, в вашем LoginController ()

Сначала добавьте в начало файла:

use Illuminate\Foundation\Auth\AuthenticatesUsers;

Затем внутри класса вверху добавьте:

use AuthenticatesUsers;

Затем в теле класса добавьте эти две функции:

/**
* Get the needed authorization credentials from the request.
*
* @param  \Illuminate\Http\Request  $request
* @return array
*/
protected function credentials(Request $request)
{

// NOTE: Add fields here to regulate login requirements.
// ORIGINAL CODE: return $request->only($this->username(), 'password', 'verified');

// CODE WITH ADDITIONAL FIELDS (you can use any syntax you want to add to the array)
// Note that the binary '1' values are still in single quotes cover all circumstances.

return array_merge($request->only($this->username(), 'password'), ['verified' => '1', 'can_login' => '1']);

}/**
* Get the failed login response instance.
*
* @param  \Illuminate\Http\Request  $request
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws ValidationException
*/
protected function sendFailedLoginResponse(Request $request)
{
// MY QUESTION IS: INSTEAD OF CALLING THIS:
$user = SysUserModel::where('email', '=', $request->email)->firstOrFail(['email','verified','can_login', 'state']);//HOW DO I CALL THIS? (And is this correct? Is there a better way to capture the user data without an additional call to the database?)

$user = retrieveByCredentials( $request->only($this->username(), 'password'));

// SO THAT I CAN DETERMINE IF
// (a) the user-email/pw doesn't exist
// (b) the user-email/pw exists but 'verified' = 0
// (c) the user-email/pw exists, 'verified' = 1, but 'can_login' = 0

// SO THAT I CAN RETURN THE APPROPRIATE ERROR MESSAGE HERE

throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
]);}

0

Решение

При настройке процесса аутентификации вы должны реализовать пользовательскую защиту. Таким образом, вам нужно изменить код фреймворка или что-то переопределить. Как вы можете видеть ниже, контроллер имеет guard свойство, которое вызывает attempt, Здесь ваш охранник будет обрабатывать переданные поля добавления.

/**
* Attempt to log the user into the application.
*
* @param  \Illuminate\Http\Request  $request
* @return bool
*/
protected function attemptLogin(Request $request)
{
return $this->guard()->attempt(
$this->credentials($request), $request->has('remember')
);
}

Смотрите здесь о том, как реализовать пользовательскую охрану:

https://laravel.com/docs/5.5/authentication#adding-custom-guards

Наконец, вы установили новую охрану в config/auth.php

1

Другие решения

Других решений пока нет …