【问题标题】:Laravel 5.2 : Authentication auth::attempt returns falseLaravel 5.2:身份验证 auth::attempt 返回 false
【发布时间】:2016-05-26 16:45:02
【问题描述】:

我正在开发身份验证模块,我遇到了这个奇怪的问题,Auth::attempt 返回 false,我的用户名和密码是正确的。

这里也问了同样的question,但这并没有解决我的问题,而且这个问题是关于 laravel 4 的,我已经尝试了他们的方法,但仍然无法正常工作。

我的控制器中有以下代码:

$user = array(
    'name' => Input::get('username'),
    'password' => Input::get('password')
);
if (Auth::attempt($user)) {
    return "ok.";
} else {
    dd($user);
}  

else 部分返回:

array:2 [▼
  "name" => "ali"
  "password" => "ali"
]

表示name,密码正确。

我使用的是 laravel 5.2,在我的 users 表中,密码没有经过哈希处理,没有 remember_token 意味着我直接创建了 user

【问题讨论】:

    标签: php laravel laravel-5.2


    【解决方案1】:

    尝试方法在将密码与数据库进行比较之前对密码进行哈希处理,这意味着如果您的数据库中的密码未经过哈希处理,则不会匹配。

    【讨论】:

      【解决方案2】:

      这不起作用,因为 auth::attempt 使用 bcrypt 将密码转换为哈希,并在用户表中查找该哈希以匹配。

      简而言之,密码应该是存储在数据库表中的哈希值,以便 auth::attempt 起作用。

      这就是你的 if() 条件失败的原因。

      以下来自 laravel 5.2 文档

      尝试方法接受一个键/值对数组作为它的第一个 争论。数组中的值将用于在 你的数据库表。因此,在上面的示例中,用户将是 通过电子邮件列的值检索。如果找到该用户,则 存储在数据库中的哈希密码将与 通过数组传递给方法的哈希密码值。如果两个 哈希密码匹配一个经过身份验证的会话将被启动 用户。

      如果身份验证成功,则尝试方法将返回 true。 否则返回false。

      【讨论】:

      • 如果您处于开发的早期阶段并且尚未构建注册功能但仍想测试身份验证,您可以通过 Hash::make('password') 或 bcrypt( 'password) (I htink) 并将其手动插入到您的数据库中。
      • @Thomas Van der Veen,你是对的,仍然需要对密码进行哈希处理。
      • 哦,谢谢你们。那是我的错。
      • 您可以使用 bcrypt(password) 将密码作为哈希存储在数据库中,然后使用 auth::attempt
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 2013-11-28
      • 2019-05-24
      • 2014-11-22
      • 1970-01-01
      • 2014-05-22
      相关资源
      最近更新 更多