Laravel 4 身份验证不起作用

Posted

技术标签:

【中文标题】Laravel 4 身份验证不起作用【英文标题】:Laravel 4 authentication not working 【发布时间】:2013-04-17 09:18:12 【问题描述】:

我有一个 Laravel 4 应用程序,我在其中设置了一个用户。在我的登录路径中,我使用电子邮件和密码调用Auth::attempt,但它总是返回为假。我的密码绝对正确,数据库中的哈希值也正确,因为Hash::check 返回 true。

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

我需要在 User 模型中添加一些东西来指定用户名字段吗?这是我的登录路径:

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
);

【问题讨论】:

数组键应与您用来验证数据库中用户身份的列相对应。 docs 中提到了这一点。您是否更改了 L4 附带的默认 User 模型? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

他们做到了。该模型还必须实现UserInterfaceRemindableInterface【参考方案3】:

在 app/config/app.php 中确保您设置了“密钥”。这让我把头发拉了出来。一切都会正常工作,密码似乎在数据库中散列,但它总是会返回 false,直到您设置此密钥并将密码重新散列到数据库中。

"php 工匠密钥:生成"

【讨论】:

非常感谢你。我正在使用 Jeffery Way 的 Laravel 4 生成器,在开始编写路由和控制器之前,我完全忘记了 Laravel 安装中的这个关键点。

以上是关于Laravel 4 身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.4 使用 ajax 登录。身份验证成功,但 redirectTo 属性不起作用并保持重定向到“/home”

护照身份验证在 laravel 5.3 中不起作用

Laravel 子域:所有子域的单一身份验证不起作用?

Laravel 多重身份验证保护路由多个中间件不起作用

Laravel 5.6 护照 API 身份验证在获取请求中不起作用

Laravel Sanctum Token API 身份验证在 Postman 中不起作用