2016-08-28 2 views
16

Теперь я использую что-то подобное для аутентификации пользователя на моей базе сайта:Как использовать Laravel паспорт с колонкой на заказ имени пользователя

if (Auth::attempt($request->only(['id', 'password']))) { 
      // 
} 

Как я могу изменить этот код для использования пользовательского столбца в качестве имени пользователя? https://laravel.com/docs/5.3/passport#password-grant-tokens

ответ

40

Вы можете использовать метод findForPassport в своей модели пользователя.

Этот метод взять имя пользователя в качестве аргумента и возвращает пользовательскую модель

Например:

class User extends Authenticatable 
{ 
    use HasApiTokens, Notifiable; 

    // ... some code 

    public function findForPassport($username) { 
     return $this->where('id', $username)->first(); 
    } 
} 
+0

Работайте как очарование. Благодарю. – tehcpu

+0

Спасибо человеку. Сэкономила мне тонну работы. Собирался переписать модуль аутентификации для предоставления пароля. Но этот ответ произошел. –

+0

Как узнать, сохранен ли пароль в отдельной таблице базы данных? Или, если учетные данные проверяются сторонним API (под капотом)? –

2

Немного слишком поздно, чтобы ответить, но я с трудом пытаясь понять это , так что ради полноты и, возможно, помочь другим в будущем.

Если вы посмотрите на this part of passport's code, вы увидите, что он также ищет метод validateForPassportPasswordGrant, поэтому, помимо ответа Александра, вы можете аутентифицировать пользователя с помощью настраиваемых полей.

Надеюсь, это поможет кому-то.

Смежные вопросы