繁体   English   中英

使用带有散列密码的Laravel auth :: attempt

[英]Using Laravel auth::attempt with hashed password

这似乎很简单,但我真的不知道。 我想在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()任何参数来告诉它按原样使用它,而不是尝试重新哈希它(如我认为的那样)?

您可以手动登录用户

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

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

在发送密码之前,您真的不应该对密码进行哈希处理。 在不加盐的情况下发送密码之前,您将如何正确地对其进行哈希处理? 如果在发送密码之前可以访问盐,那么为什么要使用API​​?

如果您担心传递未加密的密码的安全性,则应使用SSL来确保数据的安全传输。

不要认为使用API​​与使用网页有什么不同-在网站上提交表单之前不要对密码加盐,相反,如果您需要那种安全级别,则可以依赖https / SSL。

Laravel使用的哈希方法每次都会生成不同的哈希(即使对于同一字符串)。 您可以在Hashing for Laravel中阅读有关此内容的更多信息。 如您所见,它不会对两个字符串进行哈希处理并进行比较,而是使用未哈希的字符串与哈希进行比较。

如果确实要执行此操作,则需要实现自己的Auth Provider和不同的哈希算法,该算法可让您比较哈希。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM