Laravel по-русски

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

Ты не вошёл. Вход тут.

#1 06.06.2017 20:48:12

Не работает авторизация

Целый год из-за армии не писал код. Решил вернуться в коддинг и установил новый Laravel 5 (последняя версия). Написал простой код авторизации, а авторизация не проходит. В чём дело?

Controller:

public function postAuthLogin(Request $request){
        $data = $request->all();    // Все данные
        $rules = [
            'login_users' => 'required',
            'password' => 'required'
        ];

        $validator = Validator::make($data, $rules);

        if(!$validator->fails()){
            if(Auth::attempt(['login_users' => $data['login_users'], 'password' => $data['password']], $request->remember) ){
                return redirect()->route('home')->with('successMessages', 'Вы успешно авторизовались!');
            }else{
                // Выполняется этот код!!!
                return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');
            }
        }else{
            return redirect()->back()->with('errors', $validator->messages());
        }
    }

Model User (врятли что-то даст)

class User extends Authenticatable{
    use Notifiable;
    protected $primaryKey = 'id_users';

    protected $fillable = [
        'login_users', 'mail_users', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

Если что-то нужно будет, скину...Заранее спасибо!

Не в сети

#2 07.06.2017 00:53:35

Re: Не работает авторизация

Возможно ты не переопределил метод username() в LoginController и проверка происходит по стандартному полю email вместо login_users , как у тебя .

Не в сети

#3 07.06.2017 10:02:01

Re: Не работает авторизация

Bender пишет:

Возможно ты не переопределил метод username() в LoginController и проверка происходит по стандартному полю email вместо login_users , как у тебя .

А где это можно переопределить?
Да и вроде хватит того, что написал в Auth::attempt()

Не в сети

#4 07.06.2017 11:52:47

Re: Не работает авторизация

Да , верно , ничего не надо переопределять , т.к. ты используешь свой контроллер и механизм attempt() никак не связан с этим , он выбирает модель из БД по переданному массиву . Тогда , вероятнее всего , тебе нужно удостовериться , что переданное поле login_users соответствует полю непосредственно в твоей БД . Внутри userprovider'a создается builder для твоей модели и выполняется запрос к БД такого плана :
$user = User::select()->where( 'login_users', $data['login_users'] )->first();

Не в сети

#5 12.06.2017 15:16:32

Re: Не работает авторизация

Решил с нуля всё сделать, но эффект такой же, что сильно меня печалит, ибо на самом лёгком я запоролся. Код очень простой, но всё же авторизация не проходит. В БД всё норм. Т.к. простой запрос через Eloquent ORM проходит.

Контроллер:

<?php
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller{
    use AuthenticatesUsers;
    protected $redirectTo = '/';

    public function __construct(){
        $this->middleware('guest')->except('logout');
    }

    public function getAuthLogin(){
        return view('Auth.getAuthLogin');
    }

    public function postAuthLogin(Request $request){
        $this->validate($request, [
            'login_users' => 'required',
            'password' => 'required',
        ]);

        if(Auth::attempt( ['login_users' => $request->login_users, 'password' => $request->password] )){
            return redirect()->route('home')->with('successMessages', 'Вы успешно авторизовались!');
        }else{
            return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');
        }
    }
}

Модель:

<?php
namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable{
    use Notifiable;
    protected $table = 'users';
    protected $primaryKey = 'id_users';

    protected $fillable = [
        'login_users', 'mail_users', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

Route:

Route::group(['middleware' => 'guest'], function(){
//    Route::get('/', ['as' => 'welcome', 'uses' => 'HomeController@getWelcome']);
    Route::group(['prefix' => 'auth'], function(){
        Route::get('login', ['as' => 'Auth.getLogin', 'uses' => 'Auth\LoginController@getAuthLogin']);
        Route::post('login', ['as' => 'Auth.postLogin', 'uses' => 'Auth\LoginController@postAuthLogin']);
    });
});

В чём же проблема?

Изменено dima9595 (12.06.2017 15:17:02)

Не в сети

#6 12.06.2017 20:45:19

Re: Не работает авторизация

Ты в базу то надеюсь не вручную пользователя добавил? Ибо пароль хэшируется, и в недрах ларки он сравнивает хэши.
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:126 (метод validateCredentials)

    /**
     * Validate a user against the given credentials.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  array  $credentials
     * @return bool
     */
    public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return $this->hasher->check($plain, $user->getAuthPassword());
    }

Не в сети

#7 13.06.2017 00:00:05

Re: Не работает авторизация

covobo пишет:

Ты в базу то надеюсь не вручную пользователя добавил? Ибо пароль хэшируется, и в недрах ларки он сравнивает хэши.
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:126 (метод validateCredentials)

Лол, а что, сейчас уже так не работает? Да, вручную добавлял, но думал что если пароль захэшировать, то всё будет ок) Спасибо, завтра проверю)

Не в сети

#8 13.06.2017 00:22:34

Re: Не работает авторизация

dima9595 пишет:
covobo пишет:

Ты в базу то надеюсь не вручную пользователя добавил? Ибо пароль хэшируется, и в недрах ларки он сравнивает хэши.
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:126 (метод validateCredentials)

Лол, а что, сейчас уже так не работает? Да, вручную добавлял, но думал что если пароль захэшировать, то всё будет ок) Спасибо, завтра проверю)

Если ты его "нормально" (через Illuminate\Hashing\BcryptHasher по дефолту) захэшировал - то должно работать.

Видос на тему - https://laracasts.com/series/laravel-5- … pisodes/13

Изменено covobo (13.06.2017 00:25:22)

Не в сети

#9 13.06.2017 09:16:47

Re: Не работает авторизация

covobo пишет:
dima9595 пишет:
covobo пишет:

Ты в базу то надеюсь не вручную пользователя добавил? Ибо пароль хэшируется, и в недрах ларки он сравнивает хэши.
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:126 (метод validateCredentials)

Лол, а что, сейчас уже так не работает? Да, вручную добавлял, но думал что если пароль захэшировать, то всё будет ок) Спасибо, завтра проверю)

Если ты его "нормально" (через Illuminate\Hashing\BcryptHasher по дефолту) захэшировал - то должно работать.

Видос на тему - https://laracasts.com/series/laravel-5- … pisodes/13

Хэшировал через encrypt. Позже попробую создать нового пользователя через регистрацию)

Не в сети

#10 13.06.2017 10:56:28

Re: Не работает авторизация

Через регистрацию пользователя добавил, но авторизация так же не проходит(

Не в сети

#11 13.06.2017 14:16:25

Re: Не работает авторизация

dima9595 пишет:

Через регистрацию пользователя добавил, но авторизация так же не проходит(

Должно работать.
Как ты определяешь прошла авторизация или нет?

Не в сети

#12 13.06.2017 15:51:50

Re: Не работает авторизация

Вывожу специальные сообщения на страницу.

return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');

Попробовал через

Auth::loginUsingId(1);

авторизоваться - вышло. Так что, как мне кажется, дело в AUth::attempt или в модели.

Не в сети

#13 13.06.2017 19:31:13

Re: Не работает авторизация

dima9595 пишет:

Вывожу специальные сообщения на страницу.

return redirect()->back()->with('warningMessages', 'Логин и/или пароль не верны!');

Попробовал через

Auth::loginUsingId(1);

авторизоваться - вышло. Так что, как мне кажется, дело в AUth::attempt или в модели.

Все, что делает attempt (в твоем случае) - это ищет модель по логину и сравнивает твой пароль в открытом виде (который ты вбил в форму авторизации) с хэшем.

Может у тебя несколько юзеров с одним логином?

Изменено covobo (13.06.2017 19:35:36)

Не в сети

#14 13.06.2017 19:49:39

Re: Не работает авторизация

covobo пишет:

Все, что делает attempt (в твоем случае) - это ищет модель по логину и сравнивает твой пароль в открытом виде (который ты вбил в форму авторизации) с хэшем.

Может у тебя несколько юзеров с одним логином?

Вот именно только 1 юзер.

Не в сети

#15 14.06.2017 12:40:02

Re: Не работает авторизация

Эта проблема решена!) Вместо encrypt нужно было bcrypt юзать для хэширования пароля.
Теперь другая проблема появилась: не выходит из аккаунта через Auth::logout(). Просто редиректит на главную страницу, а сессия остаётся.

Не в сети

#16 14.06.2017 15:07:09

Re: Не работает авторизация

сессия и должна оставаться, просто из сессии удаляется информация об авторизации

Не в сети

#17 14.06.2017 15:46:10

Re: Не работает авторизация

constb пишет:

сессия и должна оставаться, просто из сессии удаляется информация об авторизации

проблема в том, что происходит просто редирект, а данные о пользователе остаются(

Не в сети

#18 14.06.2017 17:50:09

Re: Не работает авторизация

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

Не в сети

#19 21.07.2017 07:46:54

Re: Не работает авторизация

Забыл ответить как я решил данную проблему:
Нужно было просто убрать $this->middleware('guest')->except('logout'); Какая же простая проблема была, а я в тот раз так закипишевал. Просто раньше я в контроллере не ставил проверку middleware.
Кстати, посоветуйте пожалуйста, как лучше работать с middleware, в роуте или контроллере?

Не в сети

#20 21.07.2017 09:53:43

Re: Не работает авторизация

Кстати, посоветуйте пожалуйста, как лучше работать с middleware, в роуте или контроллере?

В роутах.
Но порой возникает необходимость использовать middleware в контроллерах, ничего зазорного в этом нет, но должно быть обосновано)

Не в сети

#21 21.07.2017 11:34:45

Re: Не работает авторизация

о порой возникает необходимость использовать middleware в контроллерах

можно пример?:)

Не в сети

Подвал раздела