Я пытаюсь перейти с обычной формы входа в систему AJAX. Все работает отлично без ajax, но когда я пытался реализовать это, но произошла одна ошибка - The key "_username" must be a string, "NULL" given
. Почему это происходит?
Я считаю, что имя пользователя не может быть сопоставлено, но почему? AJAX запрос настроен правильно и отправляет _username и _password. Я пытался преобразовать их в строки, но ничего не изменилось.
Форма входа:
<form id="loginForm">
<div class="form-group">
<input type="text" class="form-control inner-blue-shadow" id="username" name="_username" placeholder="Username"/>
</div>
<div class="form-group">
<input type="password" class="form-control inner-blue-shadow" id="password" name="_password" placeholder="Password"/>
</div>
<div class="text-center"><button type="submit" id="loginButton">Log in</button></div>
</form>
AJAX:
$('#loginForm ').submit(function(e){
e.preventDefault();
const form = $("#loginForm");
const username = $('#username').val();
const password = $('#password').val();
axios
.post('{{path('login')}}', {
_username: username,
_password: password
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.log(error.data);
});
return false;
});
Security.yaml
form_login:
login_path: login
check_path: login
success_handler: authentication_handler
failure_handler: authentication_handler
Обработчик:
namespace AppBundle\Security;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Exception\DisabledException;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
class AuthenticationHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface
{
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
return new Response("Some success response...");
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
var_dump($exception);
if ($exception instanceof DisabledException) {
return new JsonResponse([
'message' => 'The account is disabled.'
]);
} else {
return new JsonResponse([
'message' => 'Password or username is incorrect.'
]);
}
}
}
Контроллер входа в систему:
/**
* @Route("/login", name="login")
* @return RedirectResponse|Response
*/
public function login()
{
$user = $this->getUser();
if($user) {
$userRoles = $user->getRoles();
if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
if(in_array(Role::ROLE_STUDENT, $userRoles)) {
return $this->redirectToRoute('dashboard_student_home');
}
}
}
return $this->render('security/login.html.twig');
}