Symfony:在登录检查时在密码中添加salt的侦听器(或其他内容)
当用户注册时,我会在密码中添加一个salt:Symfony:在登录检查时在密码中添加salt的侦听器(或其他内容),symfony,login,passwords,salt,Symfony,Login,Passwords,Salt,当用户注册时,我会在密码中添加一个salt: $user->setPassword( $this->passwordEncoder->encodePassword( $user, $newPassword.$user->getSalt() ) ); 但是现在,当用户登录时,我如何在用户密码中添加相同的盐? 仅供参考,我没有带loginAction的控制器!我的应用程序是用reactJs和symfonyapi构建的。因此,我
$user->setPassword(
$this->passwordEncoder->encodePassword(
$user,
$newPassword.$user->getSalt()
)
);
但是现在,当用户登录时,我如何在用户密码中添加相同的盐?
仅供参考,我没有带loginAction的控制器!我的应用程序是用reactJs和symfonyapi构建的。因此,我只需要进行登录检查。编码器有一个
isPasswordValid
方法:
$this->passwordEncoder->isPasswordValid(
$user->getPassword(), // the user’s encrypted password in the DB
$password, // cleartext password as provided through UI or API
$user->getSalt() // the salt stored in the DB
);
注意:此方法不会引发异常,而是返回布尔值。如果它返回
false
,您必须适当地处理它,例如您自己抛出一个异常。这是我的工作示例Sf4(我在custom UserProvider和ApiPlatform上使用)
}
另外,你不需要担心如何编码密码和检查用户
只需定义防火墙
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
docs:
pattern: ^/docs
http_basic: ~
provider: user_provider
login:
pattern: ^/login
stateless: true
anonymous: true
provider: user_provider
json_login:
check_path: /login_check
username_path: username
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
您可以发送post/登录检查
salt存储在用户表中,并将作为检查登录过程的一部分进行检索,因此不清楚您在问什么。如何在注册期间生成salt?当然,现在不需要显式salt,所以我假设您正在处理遗留应用程序?而且用密码撒盐毫无意义。谢谢lxg的回答:)这不是一个遗留应用程序。我想我不知道怎样才能正确输入密码。我必须在用户数据库中添加salt,当用户登录时,salt将自动检索?首先,通过。除非你正在做一些非常不寻常的事情,否则你可能根本不必担心盐的问题。特别是如果您使用的是bycrypt密码编码器。它负责为您生成salt,并将其散列到散列密码本身中。不需要显影剂盐。在任何情况下,首先要让基本的登录功能正常工作,这样您就可以看到所有部分是如何组合在一起的。然后定制,如果需要的话。哦!很抱歉我的问题毫无意义!现在,多亏了你,我才明白我的错误
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
docs:
pattern: ^/docs
http_basic: ~
provider: user_provider
login:
pattern: ^/login
stateless: true
anonymous: true
provider: user_provider
json_login:
check_path: /login_check
username_path: username
password_path: password
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
{ "username":"username","password":"password"}