Попытка заставить логин и регистрационную форму остаться на одном просмотре и при отправке перейти к функции регистрации или логина, но мой логин не работает должным образом.Он возвращает меня на домашнюю страницу с данными, напечатанными в URL.Я даже не получаю сообщение об ошибке при отправке неверных учетных данных.
Я уже изменил некоторые биты кода по предложению человека из stackoverflow (заменил сгенерированную форму регистрации на написанную от руки, и регистрация все еще работает).Но вход в систему остается проблемой.
Мой контроллер:
class DefaultController extends Controller
{
/**
* @Route("/",name="home")
*/
public function homeAction(Request $request, UserPasswordEncoderInterface $passEncoder, AuthenticationUtils $authenticationUtils)
{
$greeting = $this->getDoctrine()->getRepository(UserGreetings::class)->randomGreet();
$user = new User();
$error = null;
$form = $this->createForm(UserType::class, $user);
if($request->isMethod('POST')) {
try {
$form->handleRequest($request);
if ($form->isSubmitted()) {
$encryptedPassword = $passEncoder->encodePassword($user, $user->getPassword());
$user->setPassword($encryptedPassword);
$user->setIsActive();
$user->setRoles();
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$this->addFlash('message', 'You registered successfully! Now you can login. :)');
return $this->redirectToRoute('home');
}
} catch (\Exception $exc) {
$error = 'Error in adding user: ' . $exc->getCode() . ' ' . $exc->getMessage();
}
}
return $this->render('default/home.html.twig',
['form' => $form->createView(), 'error' => $error, 'greeting' => $greeting, 'name' => null, 'errorLog' =>null]);
}
/**
* @Route("/log", name="log")
* @param Request $request
* @param AuthenticationUtils $authenticationUtils
* @return \Symfony\Component\HttpFoundation\Response
*/
public function login(Request $request ,AuthenticationUtils $authenticationUtils)
{
$greeting = $this->getDoctrine()->getRepository(UserGreetings::class)->randomGreet();
$authError = $authenticationUtils->getLastAuthenticationError();
$userNameLast = $authenticationUtils->getLastUsername();
return $this->render('default/home.html.twig', array('name' => $userNameLast, 'errorLog' =>$authError, 'greeting' => $greeting));
}
}
Мой взгляд:
{% block body %}
<div class="card card-body" id="regged">
{#{{ form_start(form) }}#}
<form action="{{ path('home') }}" method="post">
<legend class="m-b-1 text-sm-center">Register</legend>
<div class="form-group input-group">
<input type="email" name="app_bundle_user_type[email]" id="mail">
{#{{ form_widget(form.email, {'id': 'mail', 'attr': {'class': 'form-control', 'placeholder': 'Type here'}}) }}#}
<label for="mail" class="form-control-placeholder">Email</label>
</div>
<div class="form-group input-group">
{#{{ form_widget(form.username, {'id': 'username', 'attr': {'class': 'form-control', 'placeholder': 'Type here'}}) }}#}
<input type="text" name="app_bundle_user_type[username]" id="username">
<label for="username" class="form-control-placeholder">Username</label>
</div>
<div class="form-group input-group">
<input type="password" name="app_bundle_user_type[password][pass]" id="passwordFirst">
{#{{ form_widget(form.password.pass, {'id': "passwordFirst", 'attr': {'class': 'form-control', 'placeholder': 'Password'}}) }}#}
<label for="passwordFirst" class="form-control-placeholder">First</label>
</div>
<div class="form-group input-group">
{#{{ form_widget(form.password.conf, {'id': "passwordConf", 'attr': {'class': 'form-control', 'placeholder': 'Password'}}) }}#}
<input type="password" name="app_bundle_user_type[password][conf]" id="passwordConf">
<label for="passwordConf" class="form-control-placeholder">Confirm</label>
</div>
<div class="text-center">
<input type="submit" name="app_bundle_user_type[Signup]">
{#{{ form_row(form.Signup, {'attr':{'class': 'btn btn-success btn-sm'}}) }}#}
</div>
</form>
</div>
<div class="card card-body" id="loged">
{% if errorLog %}
<p>
{{ errorLog.messageKey|trans(errorLog.messageData, 'security') }}
</p>
{% endif %}
<form action="{{ path('log') }}">
<p>
<input type="text" id="username" name="_username" placeholder="username..." value="{{ name }}"><br/><br/>
<input type="password" id="password" name="_password" placeholder="password...">
<input type="hidden" name="_target_path" value="{{ path('profile') }}">
<input type="hidden" name="csrf_token" value="">
</p>
<button type="submit">Sign in</button>
</form>
</div>
{% endblock %}
Мой security.yml (измененсоответственно аннотация функции входа в систему):
main:
anonymous: ~
form_login:
login_path: log
check_path: log
logout:
path: /logout
target: /
Я ожидаю, что при отправке формы входа в систему с правами доступа будут перенаправлены на страницу профиля.Прямо сейчас он возвращает URL с предоставленной информацией и перенаправляет на домашнюю страницу (где находится форма для входа и регистрации).Как ни странно, моя регистрационная форма работает без проблем.Пример возвращенного URL после отправки формы: http://localhost:8000/log?_username=pesho&_password=123&_target_path=%2Fprofile&csrf_token=