如何在Laravel中扩展auth?

时间:2014-05-09 12:28:32

标签: laravel laravel-4

我有一个项目已经存在的用户数据库与Laravel正在使用的方案略有不同。所以我需要扩展从db和check函数中选择的凭据。基本上我需要从网上获取用户名和密码,用base64编码并在db中检查。我设法在http://laravel.com/docs/extending#authentication找到一些信息,但无法理解扩展代码。

1 个答案:

答案 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