我需要发送AJAX请求到我的网站的一部分,在那里我的用户被验证。不幸的是,Symfony 4拒绝了这些请求(并将它们发送到登录页面),因为它没有检测到它是对我的控制器/路由的身份验证访问。
如何确保ajax请求通过Symfony 4访问控制?在我的security.yaml中,我已经按如下方式配置了安全性:
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, roles: ROLE_USER }
我需要使用ajax调用访问/profile/update。如何向symfony提供凭据?
谢谢!
发布于 2018-06-27 03:41:51
您的控制器方法将Ajax调用重定向到登录页面,因为您的JS不发送凭证(读取: cookies)。
如果您使用的是fetch,请使用credentials
fetch(url, {
credentials: "same-origin"
}).then(...).catch(...);
请参阅https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials
如果您使用另一种方法创建Ajax调用,请使用一些JS代码更新您的问题,并让我知道:)。
如果您不想在执行XMLHttpRequest ('ajax')时将用户重定向到登录页面,请使用此侦听器发送403响应:
class AjaxAuthenticationListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
KernelEvents::EXCEPTION => [
['onCoreException', 10],
],
];
}
public function onCoreException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$request = $event->getRequest();
if (! $request->isXmlHttpRequest()) {
return;
}
if (! ($exception instanceof AuthenticationException) && ! ($exception instanceof AccessDeniedException)) {
return;
}
$event->setResponse(new Response('No access', 403));
}
}
https://stackoverflow.com/questions/51044435
复制相似问题