我最初使用Laravel创建了一个Web应用程序。现在,我正在使用Ionic框架开发其移动应用程序。
在使用Laravel时,它会将密码转换为加密格式。现在,在将API集成到具有登录功能的Ionic中时,我遇到了一个问题,即如何将通过移动应用程序输入的密码与Laravel表中的加密密码进行比较。
如果这是一个Web应用程序,则可以正常工作,但对于API集成,我遇到了此问题。请帮帮我。
我最初使用Laravel创建了一个Web应用程序。现在,我正在使用Ionic框架开发其移动应用程序。
在使用Laravel时,它会将密码转换为加密格式。现在,在将API集成到具有登录功能的Ionic中时,我遇到了一个问题,即如何将通过移动应用程序输入的密码与Laravel表中的加密密码进行比较。
如果这是一个Web应用程序,则可以正常工作,但对于API集成,我遇到了此问题。请帮帮我。
两种方法:
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密码盐?。
Hash::check是最好的方法来实现这一点。
if(Hash::check('plain password', 'encrypted password')){
//enter your code
}
Auth::attempt(['email' => $email, 'password' => $password])
,它会返回true/false。 - ka_lin