Laravel 4 - Auth :: attempt()不工作并返回FALSE
问题描述:
我已经安装了Laravel 4.2,但遇到了一个问题,其中'Auth :: attempt()'函数不愿让用户进入,但我可以使用'Auth :: loginUsingId()'功能登录。Laravel 4 - Auth :: attempt()不工作并返回FALSE
我的用户模型
<?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;
}
}
我的路线(我已经把一些的exaple)
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 = '[email protected]';
$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)
答
用户密码列必须是'密码'。这是硬编码到Laravel并且不可配置(即使使用getAuthPassword()
函数)。
所以从
user_pass | char(60)
改变你的数据库迁移到
password | varchar(60)
,改变
$user->user_pass = Hash::make('123456');
到
$user->password = Hash::make('123456');
当注册用户,它会工作。
+0
谢谢,工作。 由于brypt总是返回60个字符,char(60)现在更适合varchar(60)。 http://stackoverflow.com/questions/1885630/whats-the-difference-between-varchar-and-char – dragon1993 2014-08-29 14:56:06
答
将用户密码列字段从字符(60)更改为“varchar 255”删除用户密码哈希重新创建它并试一试!
提示:请做一个更好的数据库设计,当你有一个表“用户”和一列“ID”它显然意味着用户的ID,你不必指定为user_id。同样适用于您提到的每一列。 $ user-> id比$ user-> user_id更有意义。 – thegeekajay 2014-08-29 13:39:01