Я установил Laravel 4.2, но столкнулся с проблемой, когда функция Auth :: try () не желает впускать пользователя, но я могу войти в систему с помощью функции Auth :: loginUsingId ().
Модель "Мой пользователь"
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
public $timestamps = false;
protected $table = 'user';
protected $primaryKey = 'user_id';
protected $hidden = array('user_pass', 'remember_token');
public function getAuthIdentifier(){
return $this->getKey();
}
public function getAuthPassword(){
return $this->user_pass;
}
public function getRememberToken(){
return $this->user_remembertoken;
}
public function setRememberToken($value){
$this->user_remembertoken = $value;
}
public function getRememberTokenName(){
return "user_remembertoken";
}
public function getReminderEmail(){
return $this->user_email;
}
}
Мои маршруты (я добавил несколько примеров)
Route::get('login', function(){
$user = 'dd';
$pass = '123456';
$credentials =["user_nickname" => "dd","user_pass" => "123456"];
if(Auth::attempt($credentials)){
echo 'Login Successful';
}
else{
echo 'Login Failed';
}
});
Route::get('check', function()
{
if(Auth::check()){echo 'identified';}
else{echo 'not identified';}
return;
});
Route::get('reg', function()
{
$user = new User;
$user->user_nickname = 'dd';
$user->user_pass = Hash::make('123456');
$user->user_realname = 'dd';
$user->user_email = 'test@gmail.com';
$user->user_accesslevel = 1;
$user->user_language = 'HU';
$user->save();
});
Route::get('forcelogin', function()
{
Auth::loginUsingId(6,TRUE);
return;
});
Моя база данных
user_id | smaillint
user_nickname | varchar(25)
user_pass | char(60)
user_email | varchar(255)
user_realname | varchar(60)
user_accesslevel | tinyint(3)
user_language | char(2)
user_regdate | timestamp
user_remembertoken | char(60)
0
davidsarkany
29 Авг 2014 в 15:04
СОВЕТ: сделайте лучший дизайн базы данных, когда у вас есть таблица «пользователь» и столбец «идентификатор», это, очевидно, означает идентификатор пользователя, вам не нужно указывать как user_id. то же самое относится к каждой колонке, которую вы упомянули. $user->id имеет больше смысла, чем $user->user_id.
– Ajay Kumar Ganesh
29 Авг 2014 в 17:39
2 ответа
Лучший ответ
Столбец пароля пользователя ДОЛЖЕН БЫТЬ «паролем». Это жестко запрограммировано в Laravel и не настраивается (даже с функцией getAuthPassword()
).
Так что измените миграцию базы данных с
user_pass | char(60)
К
password | varchar(60)
И изменить
$user->user_pass = Hash::make('123456');
К
$user->password = Hash::make('123456');
При регистрации пользователя и будет работать.
1
Laurence
29 Авг 2014 в 15:30
Спасибо, работает. На данный момент char(60) лучше, чем varchar(60), потому что brypt всегда возвращает 60 символов. stackoverflow.com/questions/1885630 /…
– davidsarkany
29 Авг 2014 в 18:56
Измените поле столбца пароля пользователя с char (60) на «varchar 255», удалите хэш пароля пользователя, воссоздайте его и попробуйте!
0
Oguzhan
29 Авг 2014 в 15:09
Похожие вопросы
Связанные вопросы
Новые вопросы
authentication
Аутентификация - это процесс подтверждения личности или подтверждения личности.