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

 姿盛綺妤柏勋 发布于 2022-12-31 18:46

我已经通过新的simple_form functionnality实现了自定义身份验证器

    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

我的Authenticator中的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,重点是在将请求对象传递给rememberMe服务之前手动设置$ request对象中的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;
}

服务别名:


手动请求参数分配似乎有点脏,但它的工作原理.

1 个回答
  • 要以编程方式设置记住我的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"/>
    

    2022-12-31 18:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有