使用Symfony 3.0.7
我无法为匿名用户设置会话中的任意数据并将其检索到会话中。
我通常从任何几行控制器中的会话对象中检索数据:
public function dummyAction(Request $request)
{
# …
$session = $request->getSession();
$my_datas = $session->get('my_key');
# …
直到今天,仍需要(并使用)在标准配置的防火墙后面的url上的URL,这意味着使用login和login_check密钥以及用户提供程序等。
但
现在,我需要一个新的防火墙来保护新区域:“ /api/.+ ”。
该区域必须是无状态的,但是特殊的uniq URI “ / api / signup ”必须允许会话。
因此,我创建了以下防火墙
firewalls:
apisignup:
pattern: api/signup
anonymous: ~
api:
pattern: /api/
provider: usr
stateless: true
lexik_jwt: ~
我需要做的就是在访客点击时将单个标量值(验证码解决方案)保留在会话中
GET http://192.168.0.5/app_dev.php/en/api/signup
然后,在POST到相同的URL上,我需要检索该值。
注释
当前,无论我是通过GET还是POST来访问此URL,服务器响应都始终包含“ set-cookie”标头,就好像浏览器只是丢弃此命令并且不会在下一个请求中传递cookie一样。
我使用以下代码段进行了测试:
### SERVER SIDE
/**
* @Route( "/signup", name="api_signup")
* @Method( {"GET","POST"} )
*/
public function signupAction( Request $request )
{
$session = $this->get('session');
if ( $request->isMethod('POST') ) {
$datas = $request->request->all();
return new JsonResponse([
'received' => $datas['captcha']
,'captcha' => var_export($session->get('captcha'), true)
]);
}
$session->set('captcha','foobar');
return new JsonResponse(['challenge' => 'foobar']);
}
### CLIENT SIDE
$.ajax({
url:'http://192.168.0.100/app_dev.php/en/api/signup'
,method: 'get'
,success : function(datas){
// datas.challenge && $('#captcha').html(datas.challenge) &&
$.ajax({
url:'http://192.168.0.100/app_dev.php/en/api/signup'
,method: 'post'
,data: {
captcha: 'foobar' // prompt("Captcha ?")
// ...
}
});
}
});
POST JsonResponse
“验证码”值始终包含null。
有什么想法(“我想念” |“可能导致这种行为”)吗?
谢谢你。
我敢打赌,您是从另一个域发出请求。
在这种情况下,请注意CORS要求:
Access-control-allow_credentials
标头必须设置为truewithCredentials
xhr属性必须设置为true然后,您的XHTTP请求将通过该请求推送该域的所有可用的cookie。确保设置适当的限制策略以降低CSRF的风险
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句