相关疑难解决方法(0)

在access_control规则重定向后通知用户的最佳方法是什么?

来自Symfony 2.3安全文档:

如果拒绝访问,系统将尝试验证用户(如果尚未验证)(例如,将用户重定向到登录页面).如果用户已登录,将显示403"访问被拒绝"错误页面.有关更多信息,请参见如何自定义错误页面.

我目前正在使用access_control几条路线的规则.我想通知匿名用户,如果他们被重定向到登录路线,并显示" 您必须登录才能访问该页面 " 的消息.我已经阅读了几次安全文档并且没有找到与此相关的任何内容.我忽略了什么吗?

如果没有,只有当他们被重定向到登录时(即不是他们只是未经授权的角色),当他们被access_control规则停止时通知用户的最佳方式是什么?

编辑: 为了澄清,我特别询问如何检查重定向是否是由access_control规则引起的(如果可能的话,最好是在树枝上).

php redirect access-control symfony twig

20
推荐指数
1
解决办法
5109
查看次数

将Symfony2 LogoutSuccessHandler重定向到原始注销目标

我需要在注销时修改我的用户对象.为此,我有一个security.yml,其中包含以下内容(除其他外) -

#...
    logout:
        success_handler: my.logout_success_handler
        target: /
#...
Run Code Online (Sandbox Code Playgroud)

...这定义了一个注销成功处理程序,它在services.yml中定义,如下所示 -

   my.security.logout_success_handler:
       class: My\Security\LogoutSuccessHandler
       arguments: ["@security.context", "@doctrine.orm.default_entity_manager"]
Run Code Online (Sandbox Code Playgroud)

...最后,我的处理程序的业务端是这样的 -

// ...
public function onLogoutSuccess(Request $request)
{

    $user = $this->securityContext->getToken()->getUser();

    // ... do stuff with the user object....
    $this->em->flush();

    // now what?

}
// ...
Run Code Online (Sandbox Code Playgroud)

那么,它说"现在是什么?" 我知道我需要返回一个Response对象.理想情况下,我希望该响应对象将用户重定向到security.yml中logout.target中定义的任何内容.

有一种简单的方法可以查询吗?或者,更好的是,还有另一种做这种事情的方法,它不需要我参与请求/响应对象吗?

谢谢

php symfony

8
推荐指数
3
解决办法
5916
查看次数

Symfony2:为什么access_denied_handler不起作用

我想在AccessDeniedException的情况下自定义Symfony2的行为.如果引发异常的HTTP请求是XMLHTTPRequest,那么我使用JSON回复,否则我会在登录页面中生成302.

这是我的实施.该日志显示在AccessDeniedException之后永远不会调用AccessDeneidHandler.我错过了什么?

#security.yml
firewalls:
    secured_area:
        access_denied_handler: kernel.listener.access_denied.handler
Run Code Online (Sandbox Code Playgroud)

#config.yml
kernel.listener.access_denied.handler:
   class: NoaLisa\Bundle\OVMBundle\DependencyInjection\AccessDeniedHandler
     tags:
        - { name: kernel.event_listener, event: security.kernel_response, method: handle}
Run Code Online (Sandbox Code Playgroud)

#AccessDeniedHandler

class AccessDeniedHandler implements AccessDeniedHandlerInterface{

function handle(Request $request, AccessDeniedException $accessDeniedException){

    if ($request->isXmlHttpRequest()) {
        $response = new Response(json_encode(array('status' => 'protected')));
        return $response;
    }
    else {
        return new RedirectResponse($this->router->generate('login'));
    }
}
}
Run Code Online (Sandbox Code Playgroud)

exception-handling symfony

4
推荐指数
1
解决办法
5109
查看次数