Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony-预登录事件侦听器_Php_Symfony_Login_Oauth - Fatal编程技术网

Php Symfony-预登录事件侦听器

Php Symfony-预登录事件侦听器,php,symfony,login,oauth,Php,Symfony,Login,Oauth,我需要在登录过程之前/登录过程开始时执行一些操作。是否存在任何预登录事件,或者如何实现它 我使用的是Symfony3,我有一个表单登录和OAuth登录(HWIOAuthBundle) 我试过了,但是OAuth登录不起作用。或者我如何为OAuth登录实现它呢?通常,symfony中的所有登录内容都由内核的侦听器执行。我还没有使用HWIOAuthBundle包,但它似乎也只使用了Symfony安全组件 如果您只想在登录/身份验证发生之前执行某些操作,则只需将事件侦听器注册到内核.request,其优

我需要在登录过程之前/登录过程开始时执行一些操作。是否存在任何预登录事件,或者如何实现它

我使用的是Symfony3,我有一个表单登录和OAuth登录(HWIOAuthBundle)


我试过了,但是OAuth登录不起作用。或者我如何为OAuth登录实现它呢?

通常,symfony中的所有登录内容都由
内核的侦听器执行。我还没有使用HWIOAuthBundle包,但它似乎也只使用了Symfony安全组件

如果您只想在登录/身份验证发生之前执行某些操作,则只需将事件侦听器注册到
内核.request
,其优先级高于
防火墙
侦听器

您可以按照Symfony文档()中的说明执行此操作。首先在
src/AppBundle/EventListener/yourlister.php
中创建事件侦听器类:

namespace-AppBundle\EventListener;
使用Symfony\Component\HttpKernel\Event\GetResponseEvent;
给你的听众上课
{
onKernelRequest公共函数(GetResponseEvent$事件)
{
//做事
}
}
然后在
app/config/services.yml
文件中注册您的服务:

services:
    AppBundle\EventListener\YourListener:
        tags:
            - { name: kernel.event_listener, event: kernel.request, priority: 9 }

根据防火墙的优先级为8。因此,事件侦听器的优先级应该高于登录之前要执行的优先级(我在上面的示例中使用了9)。

通常,symfony中的所有登录内容都是由
内核的侦听器执行的。request
事件,主要是在symfony安全组件的
防火墙
侦听器中执行的。我还没有使用HWIOAuthBundle包,但它似乎也只使用了Symfony安全组件

如果您只想在登录/身份验证发生之前执行某些操作,则只需将事件侦听器注册到
内核.request
,其优先级高于
防火墙
侦听器

您可以按照Symfony文档()中的说明执行此操作。首先在
src/AppBundle/EventListener/yourlister.php
中创建事件侦听器类:

namespace-AppBundle\EventListener;
使用Symfony\Component\HttpKernel\Event\GetResponseEvent;
给你的听众上课
{
onKernelRequest公共函数(GetResponseEvent$事件)
{
//做事
}
}
然后在
app/config/services.yml
文件中注册您的服务:

services:
    AppBundle\EventListener\YourListener:
        tags:
            - { name: kernel.event_listener, event: kernel.request, priority: 9 }

根据防火墙的优先级为8。因此,事件侦听器的优先级应该高于登录之前要执行的优先级(我在上面的示例中使用了9)。

这可能会解决我的问题,但如何强制它仅在身份验证之前运行?现在它在每个请求中运行。
防火墙
侦听器也在每个请求中执行。您到底想做什么(即登录前要执行哪些操作)?我用会话id记录了一些关于未登录用户的操作,我想用登录用户填写这些记录,但问题是会话id在身份验证后会更改。您可以注册一个侦听器,如我在回答中所述,只将会话id存储在
$request->attributes
参数包中,因此,您可以稍后访问它,并为
security.authentication.success
事件创建一个额外的侦听器,以便在成功登录后执行实际的日志记录。这可能会解决我的问题,但如何强制它仅在验证之前运行?现在它在每个请求中运行。
防火墙
侦听器也在每个请求中执行。您到底想做什么(即登录前要执行哪些操作)?我用会话id记录了一些关于未登录用户的操作,我想用登录用户填写这些记录,但问题是会话id在身份验证后会更改。您可以注册一个侦听器,如我在回答中所述,只将会话id存储在
$request->attributes
参数包中,因此,您可以稍后访问它,并为
security.authentication.success
事件创建一个额外的侦听器,以便在成功登录后执行实际的日志记录。