Форма входа не отправлена ​​и даже не проверена, но регистрация работает - PullRequest
0 голосов
/ 20 декабря 2018

Попытка заставить логин и регистрационную форму остаться на одном просмотре и при отправке перейти к функции регистрации или логина, но мой логин не работает должным образом.Он возвращает меня на домашнюю страницу с данными, напечатанными в 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=

1 Ответ

0 голосов
/ 21 декабря 2018

Я не знаю, как раньше я этого не видел, но проблема заключалась в том, что я отправил неправильный запрос из своей формы.Данные были показаны в URL, поэтому это должно было означать, что это GET, и для аутентификации мне нужно отправить их как POST.Поэтому я просто написал в своем представлении в форме атрибут метода со значением POST.И это сработало, благодаря совету одного хорошего парня.Вот что я написал: <form action="{{ path('log') }}" method="post">.Надеюсь, что это помогает другим в такой же ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...