Laravel attempt не работает

Laravel ручная аутентификация: Auth :: попытка всегда ложна

Я использую систему ручной аутентификации laravel. Отправка формы перенаправляет на этот маршрут, показанный ниже. И в функции authenticate () имя и пароль никогда не совпадают с тем, что я сохранял ранее. то есть Auth::attempt всегда ложно.

Я зарегистрировал пользователя таким образом. пароль хэшируется с помощью bcrypt (). функция. но в функции authenticate () я сравниваю с простым паролем. я где-то читал Auth автоматически обрабатывает это. ИЛИ Есть ли что-то, что я должен изменить в config / auth.php, потому что я использовал имя для аутентификации вместо имени пользователя?

Решение

Есть проблема с именами. Auth@attempt принимает все эти полномочия, кроме password (чувствительно к регистру), который вы передаете в этом массиве и запускаете запрос where (это то, как вы можете добавить дополнительные ограничения к попытке, так как они соответствуют условиям). Если он найдет модель, он проверит хэш password учетные данные (с учетом регистра), которые вы передали, и хешированный пароль модели, который она получает $model->getAuthPassword() ,

Это поле в учетных данных является специальным, поскольку оно является необходимым для Auth, поэтому оно знает, какое поле в учетных данных должно быть паролем. Это не связано непосредственно с областью, которую вы использовали на вашем users таблица, и должна быть названа password в массиве учетных данных. Другие поля в передаваемых вами учетных данных, кроме «пароля», напрямую связаны с полями в таблице пользователей, поскольку они являются условиями для запроса базы данных к этой таблице.

Вы должны заявить в своей модели User, если вы используете поле, отличное от ‘password’ в таблице, в качестве пароля. В вашем случае вы используете «Пароль». (это все с учетом регистра)

При передаче учетных данных вы передаете простой текстовый пароль, так как будет hash_check происходит, а не прямое сравнение.

Вы можете назвать поля как хотите в своей таблице, вы просто должны сообщить об этом Eloquent.

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

Проверьте код ниже

Поскольку вы используете имя вместо электронной почты (по умолчанию) в качестве имени пользователя для аутентификации. Вы должны добавить $username собственность внутри вашего AuthController ,

Кроме того, вы можете переопределить loginUsername() метод из Illuminate\Foundation\Auth\AuthenticatesUsers черта характера.

Как и другие говорили, дело имеет значение. Затем вам нужно переопределить getAuthPassword() метод из Illuminate\Auth\Authenticatable черта на вашем User модель

Вы должны написать букву p в маленьком письме.

Проверь это ссылка на сайт также.

Кажется, все правильно.

Какие имена столбцов в таблице пользователей?

Имена чувствительны к регистру. Поэтому убедитесь, что они действительно Name а также Password и не name а также password ,

пожалуйста, проверьте с указанным выше изменением в вашем Routes.php, если вы используете версию 5 или 5.2

Убедитесь, что имена полей вашей пользовательской таблицы имеют «Имя» и «Пароль», иначе обновите их.

Проверьте длину поля вашего Password поле (в вашей базе данных, users Таблица). Он должен содержать длинный хешированный пароль примерно так $2y$10$eM.kmjTwEIykhNUqMsNzMud0E6eO6RUYAzTqirrbozY1zdhVwQmsC по крайней мере, (varchar (60))

Было бы лучше, если бы вы могли показать нам схему таблицы пользователей

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

Почему вы не используете команду php artisan make:auth ? Это сделает все, что вам нужно.

Читайте также:  Сломалась ручка у стиральной машины как сделать

Если вы хотите использовать Name как уникальное имя пользователя и пароль Password

Источник

Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

#1 06.01.2017 20:22:16

Не работает сессия при аунтeфикации через Auth::attempt

Дорогие друзья, столкнулся с проблемой, которую опишу ниже, прошу разобраться с ней. К сожалению с Laravel имею опыта маловато, причем работал с 4 версией продукта.

Операционная система: Windows 10 64
Сервер: Open Server с PHP 5.6 и Apatch 2.4
Laravel 5.3

Стоит глобальная задача , «перенести» сайт с 4 версии Ларки на 5.3. Проблема возникла при разработке формы входа на сайте. В связи с тем, что данная форма должна работать на аяксе, было решено отказаться от использования стандартного решения аунтефикации в пользу своего.

Сделал форму, написал аякс обработчик, прописал в роутер маршрут:

Ну и собственно в данном методе без лишней шелухи всего одна строка:

if (Auth::attempt([’email’ => $email, ‘password’ => $password], true)) < .

В Laravel 4, это работает без проблем, думал, что и в Laravel 5.3 сложности не будет, но, как говорится, что-то пошло не так

По итогу, метод отрабатывает и возвращает true, как положено. Следом можно вернуть данные о юзере через Auth:user() — все отлично.

Но если обновить страницу, то if(Auth:check())< . выдаст false

Какая-то проблема как будто с сессией.

При этом, если воспользоваться дефолтной формой, то все прекрасно работает.

Не пойму вот в чем проблема, кучу всего уже перелопатил и статей и видео, не пойму в чем проблема. Где то читал, что нужно делать middleware дополнительно, в других источниках пишут, что и так должно работать.

Источник

Laravel Auth:: attempt () возвращает false

Я домашний любитель и изучаю фреймворк Laravel, в настоящее время в версии 5.3 . Я использую Mac, ни homestead , ни vagrant .

В настоящее время я работаю на веб-сайте, который использует систему регистрации и регистрации для создания пользователей.

Я использовал php artisan migrate для локального управления базой данных.

Как указано ниже, он имеет три поля, а именно:

  • электронная почта
  • имя пользователя
  • пароль

У меня есть модель User (пользователи.php):

А также класс UserController (UserController.php):

Как вы можете видеть, я использую bcrypt() в качестве метода хэширования. Тем не менее, эта проблема есть, она всегда приведет к неудаче.

Я проверил следующие ссылки:

P.S. эти ссылки кажется, очень трудно следовать, так как я не использую класс Input .

3 ответов:

Проблема заключается в том, как вы перенаправляете пользователя на маршрут login после регистрации. Вы ошибочно предполагаете, что данные $request будут сопровождаться перенаправлением.

Предположим такой сценарий: запрос отправляется в метод postRegister с помощью name , email и password поля. Контроллер создает пользователя и сохраняет его в базе данных. Затем он перенаправляет пользователя, который еще не прошел проверку подлинности, на маршрут login . Метод postLogin запускается, но это время без запроса данных. В результате Auth::attempt($credentials) терпит неудачу, и вы получаете этот неприятный Failure на экране.

Если вы добавите dd($credentials) сразу после создания массива, вы увидите, что он не имеет значений:

Он вернет что-то вроде этого:

Вы не можете перенаправить данные пользовательского запроса (за исключением строки запроса, которая является частью URL-адреса), независимо от того, что. Это не то, как работает HTTP. Запрос данных в сторону, вы даже не можете перенаправить с помощью пользовательских заголовков .

Теперь, когда вы знаете, в чем корень вашей проблемы, давайте посмотрим, какие есть варианты ее решения.

1. Перенаправление со вспышкой данных

В случае, если вы хотите сохранить эту структуру, вам нужно вставить данные запроса postRegister() в сеанс (который является постоянным между запросами), а затем извлечь его в методе postLogin() , используя Session фасад, session() помощник или фактический Illuminate\Session\SessionManager класс.

Читайте также:  Если долго не работал по специальности что делать

Вот что я имею в виду:
(я немного изменил ваш код; отбросил дополнительные переменные, сделал его немного чище и т. д.)

Я настоятельно рекомендую вам не использовать этот подход. Таким образом, реализация метода postLogin() , который должен отвечать за вход пользователей, соединяется с данными сеанса, что не очень хорошо. Таким образом, вы не сможете использовать postLogin независимо от postRegister .

2. Войдите в систему пользователя сразу после регистрации

Это немного лучшее решение; если вы решили, что вам нужно войти в пользователя сразу после регистрации, почему бы просто не сделать это?

Обратите внимание, что собственный контроллер аутентификации Laravel делает это автоматически. Кстати, вот что я имею в виду.:
( В идеале это должно быть разбито на несколько методов, как и собственный контроллер аутентификации Laravel. Но это всего лишь пример для начала.)

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

Если вы хотите написать свой собственный контроллер аутентификации, это нормально. Ты многому научишься на этом пути. Но я настоятельно рекомендую прочитать собственный идентификационный код Ларавеля, особенно RegistersUsers и еще AuthenticatesUsers черты характера для того, чтобы учиться от него.

И еще одно замечание; вам не нужна эта Illuminate\Auth\Authenticatable черта в вашей User модели, поскольку она уже расширяется Authenticatable которые используют эту черту.

Вы должны хэшировать свой пароль каждый раз, когда вставляете строку bcrypt (pass). Auth:: попытка предполагает, что пароль, получаемый из базы данных, хэшируется

Auth::attempt использует \Hash::make($someString) для генерации хэша. Вы должны использовать это также для того, чтобы генерировать те же хэши из тех же строк (я предполагаю, что семя отличается от функции bcrypt() ).

Источник

How do I use the method attempt() — Laravel 7

I’m trying to figure out how Auth::attempt() works. It doesn’t return any error but it doesn’t work either, just returns false.

I have tried to define the table name, I tried to add guards but I’m not sure how it works.

According to Laravel documentation, if I’m not mistaken, I should add a guard for each authentication (I need authentication with different tables).

That’s how I defined a new guard: (I’m not sure if it has something to do with my issue)

My question is how can I authenticate users retrieving data from the table I want using Auth::attempt() or should I use my own method instead?

I’m new to Laravel so it’s a little bit confusing.

2 Answers 2

One definite error is, that you can’t have two guards with the same name.

The next error might be, that you didn’t add the provider ‘guest’ , but that can only be guessed.

I would go about it like this:

  1. Give your second web provider another name.
  2. Make sure your first web auth guard is working as expected again
  3. Go about implementing the second web auth guard

As an example your auth.php might look something like this:

You would have to define the model Guest as well, of course.

Then you could do something like:

Something to think about

Sometimes you think you need different tables for authentication, but in reality it might be a much easier approach to work with one basic user table and auth guard and then use other tables to connect the user to further data and roles, for example.

Источник

Laravel Auth::attempt() returns false

I am a home hobbyist and am studying Laravel, currently in version 5.3 . I am using a Mac, neither homestead nor vagrant .

Читайте также:  Часы casio как настроить будильник

I’m currently working on a website that uses a login and a register system to create users.

I’ve used php artisan migrate to manipulate my database locally.

As listed below, it has three fields, namely:

I have a User model (users.php):

And also, a UserController class (UserController.php):

As you can see, I am using bcrypt() as my hashing method.

However, this problem is, it will always result to a failure.

I have checked the following links:

P.S. These links seem very hard to follow as I do not utilize the Input class.

3 Answers 3

The problem is with the way you’re redirecting the user to login route after the registration. You’re falsely assuming that the $request data will be accompanied with the redirect.

Let’s assume this scenario: A request gets dispatched to the postRegister method with name , email and password fields. The controller creates the user and saves it into the database. Then it redirects the user, who is not yet authenticated, to the login route. The postLogin method gets triggered, but this time with no request data. As a result, Auth::attempt($credentials) fails and you get that nasty Failure on screen.

If you add a dd($credentials) right after you create the array, you’ll see that it has no values:

It will return something like this:

You cannot redirect with custom request data (unless with querystring which is part of the URL), not matter what. It’s not how HTTP works. Request data aside, you can’t even redirect with custom headers.

Now that you know what’s the root of your problem, let’s see what are the options to fix it.

1. Redirect with flashed data

In case you want to preserve this structure, you need to flash the request data of postRegister() into the session (which is persistent between requests) and then retrieve it in the postLogin() method using Session facade, session() helper or the actual Illuminate\Session\SessionManager class.

Here’s what I mean:
(I slightly modified your code; dropped extra variables, made it a lil bit cleaner, etc.)

I strongly recommend you against using this approach. This way the implementation of postLogin() method which is supposed to be responsible to login users gets coupled with session data which is not good. This way, you’re not able to use postLogin independently from the postRegister .

2. Login the user right after the registration

This is a slightly better solution; If you decided that you need to log in the user right after the registration, why not just doing that?

Note that Laravel’s own authentication controller does it automatically.

By the way, here’s what I mean:
(Ideally this should be broken down into multiple methods, just like Laravel’s own authentication controller. But it’s just an example to get you started.)

But still, it’s far from perfect! There are many other ways to tackle this. One could be using events, throwing exceptions on failure and redirecting using custom exceptions. But I’m not gonna explore them as there’s already a solution perfectly designed for this.

If you want to write your own authentication controller, that’s fine. You’ll learn a lot along the way. But I strongly suggest reading Laravel’s own authentication code, especially RegistersUsers and AuthenticatesUsers traits in order to learn from it.

And one more note; you don’t need that Illuminate\Auth\Authenticatable trait in your User model as it’s already extending Authenticatable which use that trait.

Источник

Оцените статью