简单起见:您必须创建并添加一个新Service,然后将其添加到包中并确定
User该类将使用它。首先,您必须实现
自己的密码编码器 :
namespace AcmeTestBundleService;use SymfonyComponentSecurityCoreEnprerPasswordEnprerInterface;class Sha256Salted implements PasswordEnprerInterface{ public function enprePassword($raw, $salt) { return hash('sha256', $salt . $raw); // Custom function for password encrypt } public function isPasswordValid($enpred, $raw, $salt) { return $enpred === $this->enprePassword($raw, $salt); }}
然后,您将添加 服务定义 ,并要指定 使用自定义编码器 的类
User。在 TestBundle / Resources /
config / services.yml中 ,添加自定义编码器:
services: sha256salted_enprer: class: AcmeTestBundleServiceSha256Salted
因此,您可以在 app / config / security.yml
中将自定义类指定为默认编码器(用于
AcmeTestBundleEntityUser类):
enprers: AcmeTestBundleEntityUser: id: acme.test.sha256salted_enprer
当然,salt在密码加密中起着核心作用。盐是唯一的,并为每个用户存储。该类
User可以使用YAML注释自动生成(表应该-当然-
包含用户名,密码,盐等字段),并应实现
UserInterface。
最后,当您必须创建新的代码时,可以使用它(控制器代码)
AcmeTestBundleEntityUser:
// Add a new User$user = new User();$user->setUsername = 'username';$user->setSalt(uniqid(mt_rand())); // Unique salt for user// Set encrypted password$enprer = $this->container->get('acme.test.sha256salted_enprer') ->getEnprer($user);$password = $enprer->enprePassword('MyPass', $user->getSalt());$user->setPassword($password);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)