laravel 4 пользовательский пароль с паролем

Поэтому я обнаружил несколько проблем, которые говорят, что вы должны переопределить getAuthPassword (), чтобы предоставить пользовательское имя столбца пароля из базы данных. Попробовал поставить этот метод с тем же именем, что и в столбце в базе данных, и не работал. Он по-прежнему снимает эту ошибку: Неопределенный индекс: пароль.

Это auth:

if (Auth::attempt(Input::only('user_displayName'), Input::get('user_password'))) 

Пробовал сменить user_password на пароль как в форме, так и в контроллере ничего не работает.

Итак, вопрос в том, есть ли у меня столбец в базе данных под названием «user_password», есть ли способ заставить Auth работать?

PS проверял все старые решения, которые я нашел

РЕДАКТИРОВАТЬ

Структура таблицы пользователя:

 +======================+ | User | +======================+ | user_id | +----------------------+ | user_displayName | +----------------------+ | user_fname | +----------------------+ | user_lname | +----------------------+ | user_email | +----------------------+ | user_password | +----------------------+ | created_at | +----------------------+ | updated_at | +----------------------+ 

Related of "laravel 4 пользовательский пароль с паролем"

tldr; Вы можете называть поле своего пароля любым удобным для вас способом, если модель User правильно использует интерфейс.

Однако вы не можете передать другой ключ массива методу Auth::attempt – может быть только индекс password

Прежде всего, вы делаете это неправильно – вам нужно передать массив учетных данных в качестве первого параметра:

 if (Auth::attempt(Input::only('user_displayName', 'user_password'))) 

Далее, к сожалению, у провайдера Eloquent есть жестко закодированный индекс массива password в коде, поэтому вы не можете передать user_password методу attempt .

Так вот что вам нужно:

 $credentials = Input::only('user_displayName'); $credentials['password'] = Input::get('user_password'); if (Auth::attempt($credentials)) // or simply rename the input in your form to password and: if (Auth::attempt(Input::only('user_displayName', 'password'))) 

Я не тестировал это, но считаю, что вам просто нужно переопределить функцию в UserTrait.php, хотя не взламывайте источник. В ваших файлах моделей / User.php добавьте следующую функцию.

 /** * Get the password for the user. * * @return string */ public function getAuthPassword() { return $this->user_password; } 

Существует статическое решение для ситуаций, когда реализация данного интерфейса недостаточна (например, у вас есть два столбца пароля, пароль пользователя и пароль поддержки).

 $qry = DB::table('users') ->where('email', $email) ->whereNotNull('support_password') ->first(); if(!empty($qry)) { $check = Hash::check($password, $qry->support_password); if ($check) { Auth::loginUsingId($qry->id, true); } } 

Вот мой способ изменения поля электронной почты по умолчанию для входа в Laravel в «email_address» без изменения кода поставщика.

Я создал класс признаков, который расширяет черту поставщика AuthenticatesUsers. И только расширенный метод имени пользователя.

App \ Http \ Контроллеры \ Auth \ AuthenticatesLogins.php:

 namespace App\Http\Controllers\Auth; use Illuminate\Foundation\Auth\AuthenticatesUsers; trait AuthenticatesLogins { use AuthenticatesUsers { AuthenticatesUsers::username as parentUsername; } /** * Get the login username to be used by the controller. * * @return string */ public function username() { $this->parentUsername(); return 'email_address'; } } 

Теперь в приложении \ Http \ Controllers \ Controller \ LoginController.php:

 class LoginController extends Controller { use AuthenticatesLogins; // <-- for custom login fields // etc. 

И … сделано! Надеюсь это поможет.