2013-04-24 220 views
9

我有一个Laravel 4应用程序,我在其中设置了一个用户。在我的登录路线中,我使用电子邮件和密码拨打Auth::attempt,但它总是返回为假。我确定密码正确并且数据库中的正确哈希值为Hash::check返回true。Laravel 4身份验证不起作用

我认为这可能是由于使用email作为登录字段而不是username,但我看不到任何设置。 This question表示您可以将选项添加到config/auth.php,但它不起作用。 This question表示使用username作为数组键,但后来我得到SQL错误,因为它试图在数据库中的用户名字段上进行选择。

我是否需要向用户模型添加一些内容以指定用户名字段?这里是我的登录路线:

Route::post('login', function() { 

    // data from login form 
    $credentials = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    $auth = Hash::check(Input::get('password'), Hash::make('mypass')); 
    var_dump($auth); // this is TRUE 

    // login was good 
    $auth = Auth::attempt($credentials); 
    var_dump($auth); // this is FALSE 
}); 
+2

数组键应该与用于验证数据库中用户的列对应。这在[docs](http://four.laravel.com/docs/security#authenticating-users)中提到。你是否更改过L4附带的默认'User'模型? – 2013-04-24 01:00:22

回答

11

我发现这个问题。正如Jason在上面的评论中所建议的那样,我修改了models/User.php文件并删除了一些我没有意识到的功能。

getAuthIdentifier()getAuthPassword()方法必须包含在User模型中进行验证!

+3

他们这样做。该模型还必须实现'UserInterface'和'RemindableInterface'。 – 2013-04-25 04:41:47

6

在app/config/app.php中,确保你有'key'设置。这让我把头发拉出来。一切都会好起来的,密码似乎在数据库中散列,但它总是会返回false,直到您设置此密钥并将密码重新哈希到数据库中。

“PHP工匠键:产生”

+0

非常感谢你。我使用Jeffery Way的Laravel 4 Generator,在我开始编写路由和控制器之前,我完全忘记了Laravel安装中的这个关键点。 – 2013-10-04 06:14:49

1

有同样的问题,让我汗了几个小时。明确检查你的User.php模型,并确保你没有覆盖默认的一个。谢谢杰森!