我正在尝试在 Laravel4 项目中进行身份验证,但它总是失败。
因为我只使用 PHP 5.3.4,所以我从https://github.com/robclancy/laravel4-hashing下载了一个使用 SHA512 的替换 Hash 包。
我已经有一个用户表(密码字段预先填充了 SHA512 哈希,与另一个应用程序共享),我的登录验证方法是:
Route::post('login', function()
{
$userdata = array(
'UserName' => 'SteB',
'password' => '1234'
);
if (Auth::attempt($userdata, true))
{
return Redirect::action('HomeController@Profile');
}
else
{
return Redirect::to('/')->with('login_errors', true);
}
});
我还使用http://hash.online-convert.com/sha512-generator检查了 SHA512 哈希是否正确
这总是失败(默默地),任何为什么或如何调试它的想法都将不胜感激。
我的用户表是:
UserID int, Identity PK
UserName varchar(24)
FullName varchar(32)
EMail varchar(64)
Password varchar(256)
这是在现有的 SQL Server 2000 数据库中,我正在从数据库中获取未经身份验证的页面的用户信息,所以我知道数据库驱动程序和连接工作正常。
Laravel 中的用户模型:
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'Users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password');
//protected $fillable = array('UserID', 'UserName', 'FullName');
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getKey();
}
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
{
/*Now all lowercase to match $userdata as suggested on SO*/
return $this->password;
}
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
{
return $this->EMail;
}
}
更新:
刚刚找到这篇文章: http: //laravel.io/topic/20/hashing-in-laravel。
看起来它没有按照我的预期做事,我认为这是一个带有随机盐的 base64 编码哈希。