gpt4 book ai didi

php - Symfony2 : Check user authentication based on path

转载 作者:可可西里 更新时间:2023-11-01 13:42:55 24 4
gpt4 key购买 nike

在 Symfony2 中,是否可以检查用户是否已通过身份验证以访问他请求的 URl。我想要做的是,我不想让登录用户返回注册或登录或恢复密码页面。

这是我的 security.yml:

    access_control:
- { path: ^/signup/, roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY}
- { path: ^/register/, roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY}
- { path: ^/recover/, roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY}

但这显示,当前用户访问被拒绝的页面。所以我认为如果我可以根据这样的请求将用户重定向到主页,通过检查他是否被允许,那会很好。我可以通过在监听器中提供用户已通过身份验证的路径来检查吗?

    public function onKernelResponse(FilterResponseEvent $event)
{
$request = $event->getRequest();
$path = $request->getPathInfo();

if($this->container->get('security.context')->getToken() != null) {
// To check if user is authenticated or anonymous
if( ($this->container->get('security.context')->getToken() instanceof UsernamePasswordToken) &&
($this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') == true) ) {
// HOW TO CHECK PATH ?
// set response to redirect to home page
}
}
}

最佳答案

security.access_map 服务

security.access_control的配置由...处理

SecurityBundle\DependencyInjection\SecurityExtension

... 为路由(路径、主机、ip、...)创建 RequestMatchers,然后调用服务的 add()方法与匹配器、允许的角色和 channel (即 https )。

该服务通常由 AccessListener 使用。 .

You can use the security.access_map service to access the security.access_control parameters in your application.

用于 security.access_map 服务的类由参数 security.access_map.class 定义并默认为

Symfony\Component\Security\Http\AccessMap ( implements AccessMapInterface )

您可以使用参数 security.access_map.class 用自定义类覆盖服务(必须实现 AccessMapInterface):

# i.e. app/config/config.yml

parameters:
security.access_map.class: My\Custom\AccessMap

如何访问服务

security.access_map 服务是一个私有(private) 服务,您可以从它的定义 here 中看出这一点

这意味着您不能像这样直接从容器请求它:

$this->container->get('security.access_map')

您必须明确地将其注入(inject)到另一个服务(即监听器服务)中才能访问它。


监听器示例

services:
my_listener:
class: My\Bundle\MyListenerBundle\EventListener\ForbiddenRouteListener
arguments: [ @security.access_map ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

然后您可以调用 getPatterns() 方法从那里获取 RequestMatchers、允许的角色 和所需的 channel 。

namespace My\Bundle\MyListenerBundle\EventListener;

use Symfony\Component\Security\Http\AccessMapInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

class ForbiddenRouteListener
{

protected $accessMap;

public function __construct(AccessMapInterface $access_map)
{
$this->accessMap = $access_map;
}

public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
$patterns = $this->accessMap->getPatterns($request);

// ...

关于php - Symfony2 : Check user authentication based on path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20193248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com