Symfony2 - 以编程方式设置记住我 cookie

2024-01-26

我通过新的 simple_form 功能实现了自定义身份验证器

    main:
        pattern: ^/
        simple_form:
            authenticator: custom_authenticator
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        remember_me:
            key:      "%secret%"
            lifetime: 31536000 # 365 jours
            path:     /
            domain:   ~
            name: my_remember_cookie

我的身份验证器中的authenticateToken()方法如下所示:

try {
    $user = $userProvider->loadUserByUsername($token->getUsername());
} catch (UsernameNotFoundException $e) {
    throw new AuthenticationException('Unknown user');
}
if ($user->isLocked() === true) {
    throw new AuthenticationException('User locked');
}
if (/* Logic checks */) { 
    return new UsernamePasswordToken(
            $user, null, $providerKey, $user->getRoles()
    );
}

我想知道,从这一点来看,是否有一种方法可以以编程方式设置“记住我”cookie(在我的情况下,我想根据用户的角色设置它)?

编辑:感谢sebbo,我解决了这个问题,重点是在将$request对象传递给rememberMe服务之前手动设置remember_me参数。

我的最终代码:

/**
 * onAuthenticationSuccess
 * 
 * @param     Request $request
 * @param     TokenInterface $token
 * @return     Response
 */
public function onAuthenticationSuccess(Request $request, TokenInterface $token) {
    $url = $this->container->get("session")->get('_security.main.target_path') ? $this->container->get("session")->get('_security.main.target_path') : $this->container->get("router")->generate('home');
    $response = $request->isXmlHttpRequest() ?
            new JsonResponse(array(
                "success" => true,
                "url" => $url
            )) : new RedirectResponse($url);
    // Relevant part
    $rememberMeService = $this->container->get("EDE.security.service.remember_me");
    $request->attributes->set($rememberMeService->getRememberMeParameter(), 'true'/*set to other than 'yes'|'true'|'on'|'1' to force to don't set cookie*/);
    $rememberMeService->loginSuccess($request, $response, $token);
    return $response;
}

服务别名:

<service id="EDE.security.service.remember_me" alias="security.authentication.rememberme.services.simplehash.main"></service>

手动请求参数分配看起来有点脏,但它确实有效。


要以编程方式设置记住我 cookie,我们在应用程序中使用以下代码:

// setting the remember me token
$this->container->get('our_company.security.service.remember_me')->loginSuccess(
    $request,
    $response,
    $this->container->get('security.context')->getToken()
);

考虑服务定义our_company.security.service.remember_me只是 Symfony2 记住我服务的别名。我们必须创建此别名才能公开“记住我”服务。

这是服务定义:

<service id="our_company.security.service.remember_me" alias="security.authentication.rememberme.services.simplehash.main"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2 - 以编程方式设置记住我 cookie 的相关文章

随机推荐

  • Mac 上的 Docker Beta:无法使用 ip 访问 nginx 容器

    我安装了 docker beata https beta docker com https beta docker com 对于 OSX 接下来 我用这个文件创建了一个文件夹docker compose yml web image ngin
  • ggraph/ggplot2 中的手动图例 [R]

    除了这个帖子 https stackoverflow com questions 51569831 how to draw graph corresponding with its attributes in ggraph r 在这里我提出
  • Web API Core 2.2 中的延迟加载

    我遇到了延迟加载的问题 我有以下 dbcontext public virtual DbSet
  • 如何从查询字符串中获取参数值?

    如何在routes jsx文件中定义路由来捕获 firebase request key从 Twitter 的单点登录进程在从其服务器重定向后生成的 URL 中的参数值 http localhost 8000 signin k v9ifuf
  • 在 Symfony2/Twig 中使用 JavaScript

    我有一个名为 contact html twig 的视图 它有一个带有一些文本字段的表单 我想使用 javascript 来验证没有任何字段为空 以及一些其他规则 但我不知道将 js 和定义放在哪里 我也不知道如何使用 Twig 表示法调用
  • 批处理文件:从串口接收数据并将其写入txt文件

    我正在尝试通过 USB 串行端口从 Arduino 提取一些数据并将其写入 txt 文件 因此 我使用批处理文件 Windows 7 普通cmd 它发送例如 d 从 Arduino 请求所需的数据 收到 d 后 Arduino 开始向 PC
  • 在没有窗口的情况下进行屏幕截图

    我一直在研究 Son Of Grab Apple 演示 我真的很难获得没有任何窗口 只有桌面 扩展坞和菜单栏 的屏幕截图 有谁知道该怎么做 下面是一些示例代码 仅使用桌面进行屏幕截图 CFArrayRef onScreenWindows C
  • 使用带有范围说明符而不是字节的 HTTP 范围标头?

    核心问题是关于HTTP headers的使用 包括Range http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 35 If Range http www w3 org Pr
  • Eclipse 无法启动但没有显示错误

    知道为什么我的 Eclipse 没有启动吗 The eclipse ini有以下内容 startup plugins org eclipse equinox launcher 1 1 0 v20100507 jar launcher lib
  • Django:为生产中的网站设置高效的日志系统

    好的 开发阶段已经结束 现在我的网站已上线 但是 我还没有设置日志记录 我的网站位于 var www html 目录 理想情况下 我想让 Django 登录 var log django 但这需要权限 将 Django 日志保存在 var
  • Android Chrome 浏览器不必要地重命名下载文件的名称和类型

    我想我会重新发布这个 因为我有更详细的信息 问题 Android Chrome 浏览器在所有情况下都会将文件重命名为 下载 在某些情况下 它会将类型重命名为 bin 例如 如果扩展名是 MOV 正如我之前提到的 同一 Android 设备上
  • 在pyspark中合并两个RDD

    假设我有以下 RDD a sc parallelize 1 2 5 3 b sc parallelize a c d e 如何将这 2 个 RDD 合并为一个 RDD 如下所示 a 1 c 2 d 5 e 3 Using a union b
  • 重用的 React 元素会阻止组件更新

    Foo是一个只应该渲染一次的组件 这可以用于性能优化 尽管这纯粹是理论问题 不解决任何特定的编码问题 这可以通过使用来实现shouldComponentUpdate或纯组件 这是推荐的方法 const Foo gt p Math rando
  • dask 和 pandas 数据帧中 apply 的不兼容性

    的一个样本triggers我的专栏Dask数据框看起来像下面这样 0 Total Traffic DNS UDP 1 TCP RST 2 Total Traffic 3 IP Private 4 ICMP Name triggers dty
  • 运行时出错 01 46,响应:...UNABLETOCONNECT

    通过蓝牙成功从 OBD II 模拟器获取数据到 Android 应用程序 现在我正在尝试将数据从 ELM327 设备获取到 Android 应用程序 我的汽车上连接了一个 ELM327 设备 蓝牙连接是由于 ECU 连接失败并出现无法连接错
  • 我应该将 .vscode 文件夹提交到源代码管理吗?

    Is the vscode文件夹是否要提交给源代码管理 在新项目中 该文件夹是空的 除了settings json文件 这个文件夹里会放什么东西 它是特定于机器的 特定于开发人员的吗 vs文件夹 从而不被提交 或者所有开发人员都应该共享这个
  • 确定安装的是哪个版本的 SharePoint?

    确定安装的 SharePoint 版本的最可靠方法是什么 无论是WSS还是MOSS 如果是MOSS 不管是标准的还是企业的 我想以编程方式检测安装的确切 SharePoint 版本 PS 我已经发过了SharePoint SE 上的这个问题
  • Django 多个动态数据库

    我一直在评估 django 并想知道以下是否可能 我已经查看了常规的多个数据库文档 因此请不要向我指出这一点 因为据我所知 尚未提及此用例 如果我错了 我收回它 我想要一个主数据库 其中驻留我的应用程序的大部分模型 但是其中一个应用程序需要
  • 如何整合我的 Xcode 项目文件?

    当我开始开发我的第一个应用程序时 我假设将文件拖到 xcode 中会将它们放入我的项目的实际目录中 并非如此 显然 Xcode 在桌面上引用了它们 有没有一种简单的方法将所有引用的文件复制到项目目录中 我的桌面很乱 使用 Finder 将所
  • Symfony2 - 以编程方式设置记住我 cookie

    我通过新的 simple form 功能实现了自定义身份验证器 main pattern simple form authenticator custom authenticator provider fos userbundle csrf