2013-01-21 83 views

回答

2

你试过:

# app/config/security.yml 
security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha1 

你应该看看这些引用过:

+0

这也出现在我的脑海里,但它不会工作,因为FOSUserBundle中需要'盐'值,我没有它在旧代码中。根据文档,salt被添加到密码中。我会尝试将空字符串放在'salt'列(如果DB甚至允许的话),但我不认为这是一个好的解决方案。 – Zeljko

+0

我刚刚尝试过你说的,并在'salt'栏中放置了空字符串;我不能登录:( – Zeljko

+1

事实上,这是不行的,不知道你可以在默认情况下禁用salting。在这种情况下,我认为你应该创建自己的密码编码器。请参阅http://stackoverflow.com/a/8175657/1337344举例说明如何做到这一点 – iamdto

2

我有同样的问题

只是覆盖由解释编码器一样@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); 
    } 
} 

你应该增加一列“版本”让传统用户和更新在下次登录

他们的相关信息
0
+0

对于其他任何人都会遇到这个问题的答案请注意,这里给出的其他答案都不会将旧密码转换为更好的加密方案(例如bcrypt等)。您应该为您的应用程序使用安全的散列方法,并支持将这些较旧的登录名作为回退,而不是坚持使用未绑​​定的sha1。这就是上面的bundle所做的。 – calumbrodie