无法验证会话 - laravel 4.2

时间:2014-12-26 19:21:46

标签: authentication laravel laravel-4

if(Auth::attempt(['username' => Input::get('username'), 'password' => Input::get('password')])){
    return Auth::user();
}
return 'Failed!';

这是有问题的代码,我确信问题出在Auth::attempt行。我找到了关于此的其他主题,但他们都没有解决方案。即:https://laracasts.com/forum/?p=1314-laravel-from-scratch-authentication-lesson-help/0

我的User模型实现了UserInterface,我还将use Illuminate\Support\Facades\Auth as Auth;放在控制器中,以防Auth::attempt部分无法识别。然而,无论有没有use ...,它都不起作用。

我也试过

Auth::attempt(Input::only('username', 'password'))

我总是到Failed!部分......

密码在数据库中存储为散列字符串,当我使用以下代码进行调试时:

echo Input::get('username') . "____" . Input::get('password');
die();

我得到了正确的结果。所以,除了问题必须在::attempt函数中发生之外,我无法想到其他任何事情。

任何消息?

**更新:** User模型

使用Illuminate \ Auth \ UserTrait; 使用Illuminate \ Auth \ UserInterface; 使用Illuminate \ Auth \ Reminders \ RemindableTrait; 使用Illuminate \ Auth \ Reminders \ RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    protected $fillable = [
        'username',
        'password',
        'email'
    ];

    public static $rules = [
        'username' => 'required',
        'password' => 'required',
        'email'    => 'required'
    ];

    public static $error_messages;

    /**
     * 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 = ['password', 'remember_token'];

    public static function isValid($input)
    {
        $validation = Validator::make($input, static::$rules);
        if ($validation->passes()) return true;

        static::$error_messages = $validation->messages();

        return false;
    }

1 个答案:

答案 0 :(得分:1)

我找到了问题的原因:

有趣的是,它在数据库中。 password列的限制为15个字符,而哈希编码的密码值包含数十个字符。因此,从输入中获取的密码值的哈希值没有完全保存在DB中,而只是哈希码的前15个字符。因此,去散(如果我可以这样称呼它)从未成功过。 :)

这是一个非常愚蠢的错误,但在我看来很容易偶然发现......