gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:44:40 26 4
gpt4 key购买 nike

我已经通过新的 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

我的 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;
}

服务别名:
<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"/>

关于Symfony2 - 以编程方式设置记住我 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24998131/

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