我登录时遇到问题。我在数据库中的表中使用正确的登录。这是my controller。
我的security.yml
:
security:
encoders:
My\HelloBundle\Entity\User:
algorithm: sha512
encode_as_base64: true
iterations: 10
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
users_db:
entity: { class: My\HelloBundle\Entity\User, property: email }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/demo/secured/login$
security: false
secured_area:
pattern: ^/
anonymous: ~
form_login:
check_path: /login_check
login_path: /login
logout:
path: /logout
target: /
#http_basic:
# realm: "Secured Demo Area"
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
我的实体太长而无法在此处粘贴,因此我将其放在pastebin
上我在登录时遇到问题,但它在注册时工作正常(密码被盐渍并保存到数据库中)。
这是错误消息:
exception 'Symfony\Component\Security\Core\Exception\BadCredentialsException' with message 'Bad credentials' in C:\xampp\htdocs\mgr\4_symfony\vendor\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php:83 Stack trace: #0
请帮帮我。 问候。
答案 0 :(得分:0)
我注意到一些问题:
您没有使用Symfony提供的编码器,基本上您的security.yml中的编码器配置被忽略,您可以更改代码(HelloController从第70行开始)将您的密码编码为:
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword($user->getPassword(),
$user->getSalt());
$user->setPassword($password);
我使用Symfony Security documentation中的存根并为我工作。
我认为用户不会被保留在提供的代码的任何部分,可能会在$user->setPassword($password);
之后添加?
$em = $this->getDoctrine()->getEntityManager();
$em->persist($entity);
$em->flush();
检查用户是否已插入数据库中,并且密码和salt存在,如果盐未持久存在,则身份验证将失败。
另外,我没有使用sha512,但我认为你没有正确创建盐,请尝试:
$user->setSalt(hash('sha512', $user->getPassword()));