【发布时间】:2018-02-07 14:24:43
【问题描述】:
所以任何使用过 perl dancer 的人都知道,要在登录时验证用户身份,您可以调用 authenticate_user
authenticate_user(
params->{username}, params->{password}
);
这是 Auth::Extensible 插件的一部分。
在我看来,它鼓励使用纯文本存储密码!当然,您可以先对密码进行哈希处理,然后确保存储的密码是相同的哈希值,但这似乎更像是一种解决方法,我发现不能保证有效。我只有使用不应使用的 sha1 才能使它工作。我想使用 Bcrypt,但密码短语根本不匹配。可能是奇怪的字符不匹配我不确定。
问题是使用 dancer Passphrase 插件,我已经可以验证用户名和密码,甚至不需要依靠 authenticate_user 来验证它们。但是为了让舞者框架考虑登录用户,您仍然必须调用必须传递密码的 authenticate_user。
我完全被困住了。我很好奇其他人是如何设法在 dancer2 中使用正确的密码管理的?
【问题讨论】:
-
看起来您甚至没有浏览过Dancer2::Plugin::Auth::Extensible 文档。
-
在阅读了我能找到的所有文档后,我只在这样的地方发帖作为最后的手段。如果你只想给出一个典型的 rtfm 类型的响应,至少用一些推理来支持它,否则“看起来你甚至没有浏览过”这个问题。
-
您从哪里得到密码需要以纯文本形式存储的想法?您显示的代码采用用户提供的凭据。它们显然是纯文本,但它们没有存储在任何地方,只是通过网络接收。
authenticate_user将在后台处理哈希和比较。它是如何做到的是完全透明的。它附带了许多不同的提供者,但如果你需要其他东西,你也可以自己推出。 -
为了澄清我正在使用“提供者:'数据库'”,所以我有一个带有用户表的数据库。我说它鼓励纯文本密码存储的原因是因为 authenticate_user 不会进行身份验证,除非 params->{password} 与数据库中的内容完全匹配。它不会散列它。但是 - "user_password username => 'jbloggs', new_password => 'secret'" 会在存储之前在 sha512 中对其进行哈希处理。
标签: perl authentication hash passwords dancer