Authentication Symfony 4:登录\u检查重定向后,会话中的身份验证令牌丢失
最近,我对使用PdoSessionHandler在数据库中存储会话做了一些代码更改。我正在使用Guard身份验证。checkCredentials工作正常,插入“会话”表也工作正常。但会话中的身份验证令牌在/login\u check重定向后丢失 身份验证令牌以序列化格式存储在会话中的“\u security\u security\u area”下,并且会话也保存在DB中,但在从/login\u check重定向到/login\u重定向会话后,可以使用相同的id,但缺少身份验证令牌详细信息。它可能无法从数据库中填充身份验证详细信息 这是我的软件包/security.yamlAuthentication Symfony 4:登录\u检查重定向后,会话中的身份验证令牌丢失,authentication,symfony4,symfony-security,Authentication,Symfony4,Symfony Security,最近,我对使用PdoSessionHandler在数据库中存储会话做了一些代码更改。我正在使用Guard身份验证。checkCredentials工作正常,插入“会话”表也工作正常。但会话中的身份验证令牌在/login\u check重定向后丢失 身份验证令牌以序列化格式存储在会话中的“\u security\u security\u area”下,并且会话也保存在DB中,但在从/login\u check重定向到/login\u重定向会话后,可以使用相同的id,但缺少身份验证令牌详细信息。它可
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
anonymous: ~
guard:
authenticators:
- App\Security\LoginFormAuthenticator
logout:
path: _logout
target: _public_signin
logout_on_user_change: true
remember_me:
secret: '%kernel.secret%'
lifetime: 2592000 # 30 days in seconds
path: /
domain: ~
remember_me_parameter: _stay_signedin
# by default, the feature is enabled by checking a
# checkbox in the login form (see below), uncomment the
# following line to always enable it.
#always_remember_me: true
token_provider: token_service
这是我的gurardAuthenticator:
/**
* Override to change what happens after successful authentication.
*
* @param Request $request
* @param TokenInterface $token
* @param string $providerKey
*
* @return RedirectResponse
*/
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
/** @var User $user */
$user = $token->getUser();
if ($user->getNewUser() === true) {
$url = '_onboard';
} elseif ($user->getResetPass() === true) {
$url = '_change_temp_password';
} else {
$url = '_login_redirect';
}
//$request->getSession()->save();
// MAS: TODO Add Audit probably in listener
return new RedirectResponse($this->urlGenerator->generate($url));
}
AuthenticationSuccess后,它会自动重定向到SecurityController.php中的LoginRedirectAction(),但此处的PostAuthenticationGuardToken丢失,AuthenticationEvent将返回AnonymousToken。
当我在SecurityContrller.php中的loginDirectAction()中打印会话时,我发现会话数据中缺少“\u security\u securied\u area”
#session: Session {#149 ▼
#storage: NativeSessionStorage {#148 ▶}
-flashName: "flashes"
-attributeName: "attributes"
-data: &2 array:2 [▼
"_sf2_attributes" => &1 array:4 [▼
"_csrf/https-kinetxx" => "rvR8Rr2UcDM_-y16ehk_jgYvMREJ8mTNouYCT16RtfY"
"_security.last_username" => "ktx_provider"
"userTimeZone" => "America/Chicago"
"practiceTimeZone" => "America/New_York"
]
"_symfony_flashes" => &3 []
]
My SecurityController.php
/**
* @Route("/login_redirect", name="_login_redirect")
*
* @param Request $request
*
* @return RedirectResponse
*/
public function loginRedirectAction(Request $request)
{
dump($request);
dump($this->get('security.authorization_checker'));
die;
}
有人能帮我解决这个问题吗?我遇到了这个问题,解决方案是将我的提供者实体从
实现用户界面,\Serializable
到
实现AdvancedUserInterface、\Serializable、EqualTableInterface
并添加所需的方法:
isEqualTo(UserInterface$user)
,isAccountNonExpired()
,isAccountNonLocked()
,isCredentialsNonExpired()
,isEnabled()
,嗨,我有类似的问题。您找到解决方案了吗?没有,我还没有找到解决方案。当转储变量,然后调用$this->redirect(…)
您的用户实体类是否实现序列化接口时,我会丢失会话-有时会丢失会话?