Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Не авторизирует Symfony

Есть action регистрации
public function SignUpAction(Request $request) { $user = new User(); $em = $this->getDoctrine()->getManager(); $form = $this->createForm(SignUpType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$newUser = $form->getData(); $password = $this->get('security.password_encoder') ->encodePassword($user, $newUser->getPassword()); $user->setSalt(md5(time())); $user->setPassword($password); $user->setIsActive(true); $user->setEmail($newUser->getEmail()); $user->setUsername($newUser->getUsername()); $user->setStatus(true);
$role = $em->getRepository('AppBundle:Role') ->findByName('ROLE_ADMIN'); $user->getUserRoles()->add($role); $em->persist($user); $em->flush();
return $this->redirectToRoute('AppBundle_homepage');
}
return $this->render('AppBundle:Security:signup.html.twig', array( 'form' => $form->createView() )); }
Регистрация проходит успешно в базе все есть. Но если я потом сразу хочу войти в систему, выдает в лог такие ошибки . Подскажите в чем дело?
[2016-09-08 18:30:49] security.INFO: Authentication request failed. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(code: 0): Bad credentials. at /var/www/symfony.first/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/UserAuthenticationProvider.php:90, Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException(code: 0): The presented password is invalid. at /var/www/symfony.first/vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/DaoAuthenticationProvider.php:67)"} []
Здесь я читал, что нужно добавить такой код.
$token = new UsernamePasswordToken($user, $user->getPassword(), "main", $user->getRoles()); $this->get("security.token_storage")->setToken($token);
$event = new InteractiveLoginEvent($request, $token); $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
И тогда оно авторизирует и вроде все ок, но если я выхожу и хочу опять зайти, то выдает ошибку, которую я описал выше.
security: encoders: App\AppBundle\Entity\User: algorithm: sha512 encode-as-base64: true iterations: 10
providers: main: entity: { class: AppBundle:User, property: username }
firewalls: main: pattern: /.* form_login: check_path: /login_check login_path: /login/ logout: true security: true anonymous: true remember_me: secret: '%secret%' lifetime: 604800 # 1 week in seconds path: / # by default, the feature is enabled by checking a # checkbox in the login form (see below), uncomment the # following line to always enable it. #always_remember_me: true
access_control: - { path: /admin/.*, role: ROLE_ADMIN } - { path: ^/login/, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }


Ответ

Думаю, salt нужно устанавливать перед тем, как зашифровывать пароль. А то ты шифруешь пароль с одной солью, а расшифровываешь с другой.
$newUser = $form->getData(); $user->setSalt(md5(time())); $password = $this->get('security.password_encoder') ->encodePassword($user, $newUser->getPassword());

Комментариев нет:

Отправить комментарий