Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток товарищи!
Сижу значит я и вот уже битый час не могу разобраться с авторизацией. Помогите пожалуйста кто чем может.
Вопрос 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, это на будущее)
Буду ждать ваших пожеланий и рекомендаций, спасибо Большое!
Не в сети
Не в сети
Все топики которые вы предоставили полностью не раскрывают проблему, там так и не написано как исправить.
У меня по прежнему выдает 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. пароль в базе захеширован. в чем проблема понять не могу.... Кто решил проблему? Как вы используете авторизацию? поделитесь кодом или ткните меня в ошибку...
Не в сети
- Правда из выше указанных топиков узнал, что пароль проверять на хеш не надо, Auth::attempt() это делает автоматически.
В общем в этом обычно и бывает проблема. Если всё ещё не работает — возьмите отладчик, посмотрите, что происходит внутри Auth::attempt(). Либо включите профайлер SQL (чтобы видеть, какой запрос отправляет авторизация).
Ещё вариант: у вас поле имени пользователя действительно называется user_name, в таблице?
Не в сети
да, значение имени столбцов в таблице я конечно же проверил в первую очередь.
с профайлером буду работать. Какой лучше не посоветуете?
Не в сети
Не в сети
да, значение имени столбцов в таблице я конечно же проверил в первую очередь.
с профайлером буду работать. Какой лучше не посоветуете?
Не в сети
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)
куда пароль то интересно делся) почему он его в запрос не вставляет... ничего не понимаю...
Альтернативные функции есть у этого класса?
Не в сети
Все, ответ нашелся в том,что поле в таблице было слишком малым по длине. и хеш соответственно урезался.
Но вот беда, теперь Auth::check() не хочет со мной дружить. Проходит авторизацию, делаю редирект, там проверяю на Auth::check(), и меня выбрасывает снова на авторизацию... У ума меня свела эта авторизация)))
Заметил, что сессия меняется каждый раз, это не нормально же, получается что авторизовал по одной сессии, и сменил на другую, что соответственна не авторизована. Есть какие идеи?
Не в сети
Сессия не должна меняться. У вас куки принимаются? Как выглядит строка Set-Cookie? Ее можно посмотреть в Firebug на вкладае Net.
Не в сети
у меня Yandex.
Set-Cookie:laravel_session={длинный набор букв}
Видно, куки принимает, но все равно сессию не запоминает(
И при переходе по страницам кука одна и таже, а вот сессия все время меняется
Изменено MrRino (25.07.2014 09:29:33)
Не в сети
Не в сети
}%В /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)
Не в сети
Не в сети
У меня Open Sever. Логи смотрю, ничего подозрительного(
Не в сети
Все, ответ найден.
Кто же знал, что в Модели User нужно еще и ключи указывать.
protected $primaryKey = 'id_users';
и тут сразу все заработало.... Спасибо @РЕКТОР
Не в сети
А зачем вообще понадобилось переопределять primary key , да и еще так странно ?
Не в сети
А зачем вообще понадобилось переопределять 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.
Не в сети
Не в сети
}%**slider23**, скорее всего, спрашивал, чем не подошёл стандартный **id**.
а) так это тест просто) прихоть, не более)
Не в сети
Страницы 1