У меня есть jQuery
AJAX
запрос:аутентификации Междоменное не хранится в Symfony2
$.ajax({
type: "POST",
url: 'http://xbo.dev/ajax/login_ajax',
dataType: 'json',
data: {
_username: $('#_username').val(),
_password: $('#_password').val()
}
}).done(function (data) {
console.log(data);
}
И в PHP
контроллер:
public function loginAjaxAction() {
$request = $this->get('request');
$success = false;
$responseCode = 300;
$authorizedHostsDev = array('xbo.dev');
if ($request->isMethod('POST') && ($request->isXmlHttpRequest() || in_array($request->headers->get('host'), $authorizedHostsDev))) {
$user = $this->get('fos_user.user_manager')->findUserBy(array('username' => $request->request->get('_username')));
if ($user) {
$encoderManager = $this->get('security.encoder_factory');
$encoder = $encoderManager->getEncoder($user);
$encodedPass = $encoder->encodePassword($request->request->get('_password'), $user->getSalt());
if ($user->getPassword() === $encodedPass) {
if ($user->getExpiresAt() < new \DateTime()) {
$responseCode = 500;
} else {
$this->userAuthentication($user);
$responseCode = 200;
$success = true;
}
} else {
$responseCode = 400;
}
}
}
$return = json_encode(array('responseCode' => $responseCode, 'success' => $success));
return new Response($return, 200, array('Content-Type'=>'application/json'));
}
Если я выполнить этот AJAX
запрос от xbo.dev, у меня есть этот результат в документе console.log(data)
:
{"responseCode":200,"success":true}
После этого я перенаправлен и я вошел в системе.
Если я выполнить этот запрос AJAX
от субдомена blog.xbo.dev, у меня есть один и тот же результат в console.log(data)
но, когда страница освежает, я 'm не перенаправлен (я остаюсь на странице подключения), и кажется, что мое действие для входа не создано (все равно можно ввести мои идентификаторы для подключения).
Как я могу изменить это поведение?
Благодаря
EDIT: Я добавил один тест, чтобы знать, если я был связан в данный момент в контроллере PHP
. Действительно, даже после запроса AJAX
от blog.xbo.dev, $responseCode
- 1000
. Тест:
if ($this->getUser()) {
$responseCode = 1000;
} else {
$responseCode = 200;
$success = true;
}
EDIT 2: Вот код метода userAuthentication:
private function userAuthentication(UserInterface $user) {
$providerKey = 'main'; // firewall name
$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$this->container->get('security.context')->setToken($token);
}
Что говорит панель отладки внизу, вы вошли в систему как пользователь? – Dheeraj
С xbo.dev, да, но с blog.xbo.dev, я все еще анонимный. –
, когда вы пытаетесь войти в систему с blog.xbo.dev, вы не вошли в систему BOTH xbo.dev и blog.xbo.dev, это правильно? – Dheeraj