首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Symfony 4防火墙后处理AJAX调用的正确方式是什么?

在Symfony 4防火墙后处理AJAX调用的正确方式是什么?
EN

Stack Overflow用户
提问于 2018-06-26 21:44:58
回答 1查看 588关注 0票数 1

我需要发送AJAX请求到我的网站的一部分,在那里我的用户被验证。不幸的是,Symfony 4拒绝了这些请求(并将它们发送到登录页面),因为它没有检测到它是对我的控制器/路由的身份验证访问。

如何确保ajax请求通过Symfony 4访问控制?在我的security.yaml中,我已经按如下方式配置了安全性:

代码语言:javascript
复制
access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/profile, roles: ROLE_USER }

我需要使用ajax调用访问/profile/update。如何向symfony提供凭据?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 03:41:51

您的控制器方法将Ajax调用重定向到登录页面,因为您的JS不发送凭证(读取: cookies)。

如果您使用的是fetch,请使用credentials

代码语言:javascript
复制
fetch(url, {
  credentials: "same-origin"
}).then(...).catch(...);

请参阅https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials

如果您使用另一种方法创建Ajax调用,请使用一些JS代码更新您的问题,并让我知道:)。

如果您不想在执行XMLHttpRequest ('ajax')时将用户重定向到登录页面,请使用此侦听器发送403响应:

代码语言:javascript
复制
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));
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51044435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档