我有一个项目已经存在的用户数据库与Laravel正在使用的方案略有不同。所以我需要扩展从db和check函数中选择的凭据。基本上我需要从网上获取用户名和密码,用base64编码并在db中检查。我设法在http://laravel.com/docs/extending#authentication找到一些信息,但无法理解扩展代码。
答案 0 :(得分:2)
使用base64对密码进行编码会导致严重的安全问题。
扩展Auth(Guard)可能很棘手,但如果你需要一些简单的东西,你可以轻松地自己进行验证:
$user = User::where('username', Input::get('username'))->first();
if( $user && $user->password == base64_decode(Input::get('password')) )
{
Auth::login($user); /// will log the user in for you
return Redirect::intended('dashboard');
}
else
{
/// User not found or wrong password
}
Laravel并不介意您的用户模型是什么,您可以使用您想要的任何表格来完成。
无论如何,我建议您在用户登录后立即重新密码:
if (Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password'))))
{
return Redirect::intended('dashboard');
}
else
{
$user = User::where('email', Input::get('email'))->first();
if( $user && $user->password == md5(Input::get('password')) )
{
$user->password = Hash::make(Input::get('password'));
$user->save();
Auth::login($user);
return Redirect::intended('dashboard');
}
}
唯一的要求是你的用户(或你称之为的任何模型)模型实现\Illuminate\Auth\UserInterface
并实现它用来获取正确数据的方法:
class Customer implements Illuminate\Auth\UserInterface extends Eloquent {
public function getAuthIdentifier()
{
return 'Username';
}
public function getAuthPassword()
{
return $this->Password;
}
public function getRememberToken()
{
/// this must be implemented to Laravel knows what your data is
}
public function setRememberToken($value)
{
/// this must be implemented to Laravel knows what your data is
}
public function getRememberTokenName()
{
/// this must be implemented to Laravel knows what your data is
}
}
您基本上要做的是重现Laravel的用户模型,更改您需要更改的内容以使其适用于您自己的数据库表:https://github.com/laravel/laravel/blob/master/app/models/User.php