php - 如何在登录时向 symfony2 上的 session 注入(inject)特定值?

标签 php symfony session authentication symfony-2.3

我在 symfony2 中实现了一个登录系统,其中包括 security.xml 配置和一些自定义内容...

在成功登录时,symfony 将用户发送到一个特定的 Controller ,我在其中编写了一些代码来将一些额外的数据填充到 session 中。到目前为止,我们从登录页面启动应用程序时一切正常。

但在某些情况下,当我们访问某些需要身份验证的页面时,symfony 会强制我们登录页面。成功登录后,它会将我们直接带到该页面(我们来自的页面)而不是登录页面。在这种情况下,我们在着陆页上编写的额外代码不会被执行,因此该应用程序不会进一步按预期运行。

我的问题是要克服这个问题...symfony2 中是否存在任何钩子(Hook)/设置/函数,通过它我可以在所有成功登录时执行一组代码,而不管用户被重定向到哪个页面。

最佳答案

您可以实现成功处理程序。

  1. 编写一个实现AuthenticationSuccessHandlerInterface的类:

  2. 将其定义为服务(您可以注入(inject)其他服务,如 doctine 或安全上下文,在您的情况下为 Session)

  3. 在安全配置中添加处理程序服务,例如:

    firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    
    secured_area:
        pattern:   ^/
        anonymous: ~
        form_login:
            login_path:  login
            check_path:  login_check
            success_handler: some.service.id
        logout:
            path: logout
            target: /
    

检查 this一个完整的例子和reference所有 symfony2 安全配置选项的文档(您也可以配置 failure_handler)。

希望对你有帮助

关于php - 如何在登录时向 symfony2 上的 session 注入(inject)特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26396893/

相关文章:

asp.net - 使用 JavaScript 访问 ASP.net session 数据的最佳方法是什么?

PHP: bootstrap.php

php - 如何从mysql表中获取我的本地时间

php - 在 Silex 中检测环境类型(生产、开发或暂存)

php - Symfony5 项目的 Phan/phan 配置

node.js - 快速 session 和 Passport : req. isAuthenticated() 登录后返回 false

php - 更改 php.ini 文件后是否需要重新启动 Apache?

php - mysql DELETE 查询出现 JOIN 错误...

php - ORM-ManyToMany 关系中的附加字段

php - session 数组到 javascript 数组