Laravel по-русски

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

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

#1 23.07.2014 13:35:52

Вопросы по авторизации и все что с ней связано.

Доброго времени суток товарищи!

Сижу значит я и вот уже битый час не могу разобраться с авторизацией. Помогите пожалуйста кто чем может.

Вопрос 1.

Реализую авторизацию, у меня она следующего вида:

$credentials = array('user_name' => Input::get('username'), 'password' => Input::get('password'));
     if (Auth::attempt($credentials))
     {
         return Redirect::to('/home');
     }
     return Redirect::to('/');

Понятно что attempt возвращает либо true либо false. Но вот в чем беда, при таком подходе он всегда возвращает false. И базу проверил, и данные что идут по post запросу, с виду все верно, но что-то не нравится ему( В чем может быть проблема?

Вопрос 2.

Я никак не соображу, искал информацию в интернете, либо плохо искал, что мне тоже не помогло.
Вот авторизация если прошла, то как вернуть данные из базы именно того пользователя что авторизовался?
Использовать User::find(int id) ? Но как узнать id??? или есть какие другие способы?
User::all() понятно достает все данные из таблицы, а мне нужно конкретного распознать, чтобы выполнять манипуляцию с ним. И не пойму как это сделать.

Вопрос 3.
Понятно что пароль без соли, что баба без лифчика.
Использовал поначалу авторизации что приведена выше Hash::make(Input::get('password'))
В базу показал что все закодировалось.
А как проверить потом при входе? с Hash::check() ? просто не могу проверить пока так ткак проблема выше в вопросе 1, это на будущее)

Буду ждать ваших пожеланий и рекомендаций, спасибо Большое!

Не в сети

#2 23.07.2014 14:26:25

Re: Вопросы по авторизации и все что с ней связано.

  1. Сижу значит я и вот уже битый час не могу разобраться с авторизацией. Помогите пожалуйста кто чем может.

Как насчёт поиска? Или другая проблема?

  1. Вот авторизация если прошла, то как вернуть данные из базы именно того пользователя что авторизовался?

Auth::user().

Не в сети

#3 24.07.2014 12:58:51

Re: Вопросы по авторизации и все что с ней связано.

Все топики которые вы предоставили полностью не раскрывают проблему, там так и не написано как исправить.
У меня по прежнему выдает bool(false) при попытке использовать Auth::attempt()
Правда из выше указанных топиков узнал, что пароль проверять на хеш не надо, Auth::attempt() это делает автоматически. Вот за это спасибо!
И все же, вопрос остается открытым.

$pass =  Input::get('password');
     $user = Input::get('username');
     $credentials = ['password' => $pass,'user_name' => $user];

     if (Auth::attempt($credentials,true)) //todo Не работает авторизация
     {
         return Redirect::to('index');
     }
     else {
     Session::flash('error_signup','Неверно введены данные логин/пароль');

         var_dump(Auth::attempt($credentials));
         //return Redirect::to('/');
     }

var_dump выдает на false. пароль в базе захеширован. в чем проблема понять не могу.... Кто решил проблему? Как вы используете авторизацию? поделитесь кодом или ткните меня в ошибку...

Не в сети

#4 24.07.2014 13:50:47

Re: Вопросы по авторизации и все что с ней связано.

  1. Правда из выше указанных топиков узнал, что пароль проверять на хеш не надо, Auth::attempt() это делает автоматически.

В общем в этом обычно и бывает проблема. Если всё ещё не работает — возьмите отладчик, посмотрите, что происходит внутри Auth::attempt(). Либо включите профайлер SQL (чтобы видеть, какой запрос отправляет авторизация).

Ещё вариант: у вас поле имени пользователя действительно называется user_name, в таблице?

Не в сети

#5 24.07.2014 14:41:41

Re: Вопросы по авторизации и все что с ней связано.

да, значение имени столбцов в таблице я конечно же проверил в первую очередь.
с профайлером буду работать. Какой лучше не посоветуете?

Не в сети

#6 24.07.2014 14:54:59

Re: Вопросы по авторизации и все что с ней связано.

Для начала банально:

  Event::listen('illuminate.query', function ($sql, array $bindings) {
    foreach ($bindings as $binding) {
      $sql = preg_replace('/\?/', $binding, $sql, 1);
    }

    echo $sql;
  });

Не в сети

#7 24.07.2014 15:05:47

Re: Вопросы по авторизации и все что с ней связано.

MrRino пишет:

да, значение имени столбцов в таблице я конечно же проверил в первую очередь.
с профайлером буду работать. Какой лучше не посоветуете?

Лучший - https://github.com/barryvdh/laravel-debugbar

Не в сети

#8 24.07.2014 21:02:28

Re: Вопросы по авторизации и все что с ней связано.

Proger_XP спасибо, использовал твой код.
Не понимаю почему так. Код который я использую

$pass =  Input::get('password');
$user = Input::get('username');
     $credentials = ['password' => $pass,'user_name' => $user];

     if (Auth::attempt($credentials,true)) //todo Не работает авторизация
     {
         return Redirect::to('index');
     }
     else {
     Session::flash('error_signup','Неверно введены данные логин/пароль');

         var_dump(Auth::attempt($credentials));
         //return Redirect::to('/');
     }

а запрос идет без пароля:
select * from `users` where `user_name` = MrRino limit 1
bool(false)

куда пароль то интересно делся) почему он его в запрос не вставляет... ничего не понимаю...
Альтернативные функции есть у этого класса?

Не в сети

#9 25.07.2014 00:02:28

Re: Вопросы по авторизации и все что с ней связано.

Все, ответ нашелся в том,что поле в таблице было слишком малым по длине. и хеш соответственно урезался.

Но вот беда, теперь Auth::check() не хочет со мной дружить. Проходит авторизацию, делаю редирект, там проверяю на Auth::check(), и меня выбрасывает снова на авторизацию... У ума меня свела эта авторизация)))
Заметил, что сессия меняется каждый раз, это не нормально же, получается что авторизовал по одной сессии, и сменил на другую, что соответственна не авторизована. Есть какие идеи?

Не в сети

#10 25.07.2014 07:27:40

Re: Вопросы по авторизации и все что с ней связано.

Сессия не должна меняться. У вас куки принимаются? Как выглядит строка Set-Cookie? Ее можно посмотреть в Firebug на вкладае Net.

Не в сети

#11 25.07.2014 09:24:13

Re: Вопросы по авторизации и все что с ней связано.

у меня Yandex.
Set-Cookie:laravel_session={длинный набор букв}
Видно, куки принимает, но все равно сессию не запоминает(

И при переходе по страницам кука одна и таже, а вот сессия все время меняется

Изменено MrRino (25.07.2014 09:29:33)

Не в сети

#12 25.07.2014 11:48:59

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Вопросы по авторизации и все что с ней связано.

В /app/config/session.php какой драйвер указан для сессий? PHP(Auth::attempt($credentials,true)) — второй параметр подразумевает что у вас в куках есть remember_token, он присутствует?

Изменено Cheshirrski (25.07.2014 11:50:11)

Не в сети

#13 25.07.2014 11:56:23

Re: Вопросы по авторизации и все что с ней связано.

Cheshirrski пишет:

}%В /app/config/session.php какой драйвер указан для сессий? %%(Auth::attempt($credentials,true)) %% - второй параметр подразумевает что у вас в куках есть remember_token, он присутствует?

Драйвер стоит file. пробовал и database, не помогло. В базе так же наблюдал изменение сессии с каждым запросом.

в куках есть
Name:remember_{набор букв}
Value: {много букв}

что соответственно присутствует. и эта value одна и та же, т.е ее он не меняет

Если на странице атворизации вывести var_dump(Auth::user()->user_name) - OK, пользователь авторизован и найден
при редиректе авторизация отвалилась...


Еще.

в папке app/config/testing присутствуют файлы cache.php и sessions.php где значение драйвера array это для чего и нужны ли они? пробовал в них ставить file тож не помогло.

Изменено MrRino (25.07.2014 12:02:21)

Не в сети

#14 25.07.2014 13:02:06

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: Вопросы по авторизации и все что с ней связано.

  1. в папке app/config/testing присутствуют файлы cache.php и sessions.php где значение драйвера array это для чего и нужны ли они?

Это конфиги, которые подхватываются при тестировании.
Значит проблема в сессиях, посмотрите логи сервера, логи php, кстати, что у вас установлено?

Не в сети

#15 25.07.2014 13:30:40

Re: Вопросы по авторизации и все что с ней связано.

У меня Open Sever. Логи смотрю, ничего подозрительного(

Не в сети

#16 25.07.2014 20:00:19

Re: Вопросы по авторизации и все что с ней связано.

Все, ответ найден.
Кто же знал, что в Модели User нужно еще и ключи указывать.
protected $primaryKey = 'id_users';

и тут сразу все заработало.... Спасибо @РЕКТОР

Не в сети

#17 26.07.2014 00:42:58

Re: Вопросы по авторизации и все что с ней связано.

А зачем вообще понадобилось переопределять primary key , да и еще так странно ?

Не в сети

#18 26.07.2014 08:59:24

Re: Вопросы по авторизации и все что с ней связано.

slider23 пишет:

А зачем вообще понадобилось переопределять primary key , да и еще так странно ?

из документации

Note: Eloquent will also assume that each table has a primary key column named id. You may define a primaryKey property to override this convention.

Не в сети

#19 26.07.2014 10:14:34

Re: Вопросы по авторизации и все что с ней связано.

slider23, скорее всего, спрашивал, чем не подошёл стандартный id.

Не в сети

#20 26.07.2014 22:32:22

Re: Вопросы по авторизации и все что с ней связано.

Proger_XP пишет:

}%**slider23**, скорее всего, спрашивал, чем не подошёл стандартный **id**.

а) так это тест просто) прихоть, не более)

Не в сети

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