如何将字符串密码与Laravel加密密码进行比较

12

我最初使用Laravel创建了一个Web应用程序。现在,我正在使用Ionic框架开发其移动应用程序。

在使用Laravel时,它会将密码转换为加密格式。现在,在将API集成到具有登录功能的Ionic中时,我遇到了一个问题,即如何将通过移动应用程序输入的密码与Laravel表中的加密密码进行比较。

如果这是一个Web应用程序,则可以正常工作,但对于API集成,我遇到了此问题。请帮帮我。


你为什么需要这样做?你有Auth门面:Auth::attempt(['email' => $email, 'password' => $password]),它会返回true/false。 - ka_lin
2个回答

24

两种方法:

1.

$hashedPassword = User::find(1)->password;

if (Hash::check('plain-text-password', $hashedPassword)) {
    // The passwords match...
}
$hashedPassword = User::find(1)->password;

if (Hash::make('plain-text-password') === $hashedPassword) {
  // The passwords match...
}

然而,正如官方文档所说,以及DRY(不要重复自己)的专业方法,如果您正在使用Laravel提供的LoginController,那么您可能不需要直接使用这两种方法,因为它已经自动执行了第一种方法。

参考: https://laravel.com/docs/5.4/hashing

重要更新

这里发布的第二种方法不起作用,因为Laravel使用bcrypt,每次对密码进行哈希时都会生成一个随机的salt;这使得每个哈希与数据库中原始哈希密码不同。请改用第一种方法。您还可以阅读在哪里存储laravel密码盐?


8

Hash::check是最好的方法来实现这一点。

if(Hash::check('plain password', 'encrypted password')){
    //enter your code
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接