我有传统的应用程序,保持密码加密sha1()
函数,没有盐。如何将sha1()密码转换为FOSUserBundle?
现在该网站正在转换为Symfony2和FOSUserBundle,我如何将它们转移到新数据库?
我有传统的应用程序,保持密码加密sha1()
函数,没有盐。如何将sha1()密码转换为FOSUserBundle?
现在该网站正在转换为Symfony2和FOSUserBundle,我如何将它们转移到新数据库?
你试过:
# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha1
你应该看看这些引用过:
我有同样的问题
只是覆盖由解释编码器一样@iamdto
# app/config/security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface:
id: your.custom.encoder
你的类应该是
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
class CustomEncoder implements PasswordEncoderInterface
{
public function encodePassword($raw, $salt) {
//do not use salt here
return sha1($raw);
}
public function isPasswordValid($encoded, $raw, $salt) {
return $encoded === $this->encodePassword($raw, $salt);
}
}
你应该增加一列“版本”让传统用户和更新在下次登录
他们的相关信息对于其他任何人都会遇到这个问题的答案请注意,这里给出的其他答案都不会将旧密码转换为更好的加密方案(例如bcrypt等)。您应该为您的应用程序使用安全的散列方法,并支持将这些较旧的登录名作为回退,而不是坚持使用未绑定的sha1。这就是上面的bundle所做的。 – calumbrodie
这也出现在我的脑海里,但它不会工作,因为FOSUserBundle中需要'盐'值,我没有它在旧代码中。根据文档,salt被添加到密码中。我会尝试将空字符串放在'salt'列(如果DB甚至允许的话),但我不认为这是一个好的解决方案。 – Zeljko
我刚刚尝试过你说的,并在'salt'栏中放置了空字符串;我不能登录:( – Zeljko
事实上,这是不行的,不知道你可以在默认情况下禁用salting。在这种情况下,我认为你应该创建自己的密码编码器。请参阅http://stackoverflow.com/a/8175657/1337344举例说明如何做到这一点 – iamdto