[英]Symfony4 login invalid credentials error
我正在按照本指南设置简单的登录表单:
https://symfony.com/doc/current/security/form_login_setup.html
我已经完成了该文档的所有操作,但是当我尝试登录时却收到此错误:
BadCredentialsException {#777 ▼
-token: UsernamePasswordToken {#778 ▶}
#message: "Bad credentials."
#code: 0
#file: "/var/www/html/advert-board/vendor/symfony/security/Core/Authentication/Provider/UserAuthenticationProvider.php"
#line: 69
trace: {▶}
}
我也跟踪了其他一些类似的问题,但是没有一个问题对我有帮助。 最常见的情况通常与用户注册而不是登录有关。 但是,通过比较https://bcrypt-generator.com/中的哈希值,我可以知道密码已正确保存。 无论如何,这是我的注册表:
报名表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', EmailType::class)
->add('username', TextType::class)
->add('plainPassword', RepeatedType::class, [
'type' => PasswordType::class,
'first_options' => ['label' => 'Password'],
'second_options' => ['label' => 'Repeat Password']
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
'csrf_protection' => true,
'csrf_field_name' => '_token',
'csrf_token_id' => 'user_item',
]);
}
这个RegistrationController:
/**
* @Route("/register", name="registration")
*
* @param Request $request
* @return \Symfony\Component\HttpFoundation\Response
*/
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder)
{
$user = new User();
$form = $this->createForm(RegistrationForm::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$params = $request->request->all();
$password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
$user->setPassword($password);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
return $this->redirectToRoute('homepage');
}
return $this->render('user/register.html.twig', [
'form' => $form->createView()
]);
}
我可以确认$user->getPlainPassword()
从表单密码输入中返回了正确的字符串。
我的security.yml文件:
security:
encoders:
App\Entity\User: bcrypt
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
in_memory: { memory: ~ }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
form_login:
login_path: login
check_path: login
secured_area:
form_login:
csrf_token_generator: security.csrf.token_manager
# activate different ways to authenticate
# http_basic: true
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
# form_login: true
# https://symfony.com/doc/current/security/form_login_setup.html
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, roles: ROLE_USER }
login.html.twig:
{% if error %}
{{ dump(error) }}
<div>{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('login') }}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<input type="hidden" name="_target_path" value="/profile" />
<button type="submit">login</button>
</form>
这个错误使我的发展停了一整天,我对此一无所知! 这实际上可能是什么问题?
您需要定义一个用户提供程序,以从某些数据源加载用户。 当前,您仅定义了in_memory
用户提供程序,因此,这是symfony尝试加载用户的位置。
您可以使用实体提供程序将您的用户实体用作数据源。
将此添加到您的security.yml
:
providers:
doctrine_user_provider:
entity:
class: App\Entity\User
property: username
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.