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 模型中以进行身份验证!
【讨论】:
他们做到了。该模型还必须实现UserInterface
和RemindableInterface
。【参考方案3】:
在 app/config/app.php 中确保您设置了“密钥”。这让我把头发拉了出来。一切都会正常工作,密码似乎在数据库中散列,但它总是会返回 false,直到您设置此密钥并将密码重新散列到数据库中。
"php 工匠密钥:生成"
【讨论】:
非常感谢你。我正在使用 Jeffery Way 的 Laravel 4 生成器,在开始编写路由和控制器之前,我完全忘记了 Laravel 安装中的这个关键点。以上是关于Laravel 4 身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章
laravel 5.4 使用 ajax 登录。身份验证成功,但 redirectTo 属性不起作用并保持重定向到“/home”