我正在处理身份验证模块,我有这个奇怪的问题,$user = array(
'name' => Input::get('username'),
'password' => Input::get('password')
);
if (Auth::attempt($user)) {
return "ok.";
} else {
dd($user);
}
返回false,我的用户名和密码是正确的。
同样question也在这里被问到,但这并没有解决我的问题,这个问题是关于laravel 4,我已经尝试了他们的方法,但仍然没有工作。
我的控制器中有以下代码:
array:2 [▼
"name" => "ali"
"password" => "ali"
]
else部分返回:
name
这意味着users
和密码是正确的。
我正在使用laravel 5.2,在我的remember_token
表格中,密码未经过哈希处理,没有user
表示我已直接创建了clearfix
。
答案 0 :(得分:2)
try方法在将密码与数据库进行比较之前对密码进行哈希处理,这意味着如果数据库中的密码未经过哈希处理,则不会匹配。
答案 1 :(得分:1)
这不起作用,因为auth :: attempt使用bcrypt将密码转换为hash,并在users表中查找该hash以匹配。
简而言之,密码应该是存储在数据库表中的哈希值,用于auth ::尝试工作。
这就是你的if()条件失败的原因。
以下是来自laravel 5.2 docs
attempt方法接受一个键/值对数组作为其第一个 论点。数组中的值将用于查找用户 你的数据库表。因此,在上面的示例中,用户将是 通过电子邮件列的值检索。如果找到用户,则 存储在数据库中的哈希密码将与之进行比较 散列密码值通过数组传递给方法。如果是两个 将启动散列密码匹配经过身份验证的会话 用户。
如果身份验证成功,则尝试方法将返回true。 否则,将返回false。