使用Laravel auth ::使用哈希密码尝试

时间:2013-04-14 16:27:46

标签: php authentication laravel

这看起来很简单,但我真的无法弄明白。我想在 Laravel 4 中使用Auth::attempt($credentials),但使用已经过哈希的密码(因为它是一个API)。它在我发送未散列的密码时有效,但我不明白如何告诉Auth“不哈希”给定的密码。

快速“演示”

什么有效:

Auth::attempt([Request::getUser(), Request::getPassword()]);

curl --user username:notHashedPassword localhost:8000/api/

什么不起作用:

Auth::attempt([Request::getUser(), Request::getPassword()]);

curl --user username:$2y$08$xo7HpxFyeF2UKHOYs/e localhost:8000/api/

我是否可以传递给Auth::attempt()的任何论据,告诉它使用它,而不是试图重新使用它(我认为是这样)?

3 个答案:

答案 0 :(得分:3)

您可以手动登录用户

$user = User::find($id);

if ($user->password == Request::getPassword()) {
    Auth::login($user->id);
}

答案 1 :(得分:2)

在发送密码之前,您确实不应该对密码进行哈希处理。在没有盐的情况下发送密码之前,你怎么能正确地散列密码呢?如果您在发送密码之前可以访问salt,那么为什么要使用API​​?

如果您担心传递未经过散列处理的密码的安全性,那么您应该使用SSL来确保数据的安全传输。

在使用网页时不要认为API有任何不同 - 在网站上提交表单之前不要使用密码,而是需要依赖https / SSL的安全级别。 / p>

答案 2 :(得分:1)

Laravel使用的散列方法每次都会生成不同的散列(即使是相同的字符串)。您可以在Hashing for Laravel中详细了解相关信息。正如您所读到的,它不会散列两个字符串并进行比较,而是使用未散列的字符串与散列进行比较。

如果你真的想要这样做,你需要实现自己的Auth Provider和一个不同的散列算法,以便你比较哈希。

如果您担心安全问题,则应考虑使用HTTPS,以便绝不以纯文本形式发送安全详细信息(包括密码)。