我有一个jQuery
AJAX
请求:
$.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'));
}
如果我从xbo.dev执行此AJAX
请求,则会在console.log(data)
中得到以下结果:
{"responseCode":200,"success":true}
之后,我将被重定向并登录。
如果我从blog.xbo.dev之类的子域执行此AJAX
请求,则在console.log(data)
中会得到相同的结果,但是,当页面刷新时,我不会被重定向(我停留在连接页面上),并且看来我的登录操作未执行(仍然可以输入我的ID进行连接)。
我该如何改变这种行为?
谢谢
编辑:我只是添加了一个测试,以了解当前是否在PHP
控制器中连接了我。实际上,即使在来自blog.xbo.dev的AJAX
请求之后,$responseCode
还是1000
。考试 :
if ($this->getUser()) {
$responseCode = 1000;
} else {
$responseCode = 200;
$success = true;
}
编辑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);
}
参考方案
这是我找到的解决方案。
我从子域blog.xbo.dev中发现,我的PHP
控制器无法为经过身份验证的用户设置cookie。
因此,我只是考虑了一下,决定专门为我的子域创建一条不同的路由。
我在我的routing.yml中修正了host
参数。
因此,我有一条路线用host: blog.xbo.dev
调用,第二条路线用host: xbo.dev
调用。这两个路由都针对相同的PHP控制器功能(loginAjaxAction
),并且运行良好。
希望这会有所帮助。
PHP:对数组排序 - php请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
PHP PDO组按列名称查询结果 - php以下PDO查询返回以下结果:$db = new PDO('....'); $sth = $db->prepare('SELECT ...'); 结果如下: name curso ABC stack CDE stack FGH stack IJK stack LMN overflow OPQ overflow RS…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…