Я настроил функцию входа в систему с помощью symfony вручную без использования FOSUserBUndle, и я хотел бы добавить опцию запомнить меня.
Все работает хорошо, файл cookie хорошо создан, за исключением того, что когда я выхожу из браузера и снова открываю его, я все еще отключен
Вот мой код:
public function connect(array $arrayUser, array $roles)
{
if (!isset($user['secretKey'])) {
$credentialsClient = $this->get('custom.security.credentials_client');
$accessToken = $credentialsClient->getAccessToken();
$secretKey = $credentialsClient->fetch('/security/'.$arrayUser['id']);
} else {
$secretKey = $arrayUser['secretKey'];
}
$user = new User();
$user->setId($arrayUser['id']);
$user->setRoles($roles);
$user->setUsername($arrayUser['username']);
$request = $this->get('request_stack')->getCurrentRequest();
if ($request->get('_remember_me') == 'on'){
//Token to set the REMEMBERME cookie
$token = new UsernamePasswordToken($user, $user->getPassword(), 'secured_area', $roles);
//Token to set the session
$token_session = new CustomToken($user->getId(), $secretKey, $roles);
$this->get('security.token_storage')->setToken($token_session);
$this->get('session')->set('apiUser', serialize($arrayUser));
$rememberMeService = new TokenBasedRememberMeServices([$arrayUser],$this->getParameter('secret'),'secured_area', [
'path' => '/',
'name' => 'REMEMBERME',
'domain' => 'localhost',
'secure' => false,
'httponly' => true,
'lifetime' => 1209600, // 14 days
'always_remember_me' => false,
'remember_me_parameter' => '_remember_me'
]);
$response = new Response();
$rememberMeService->loginSuccess($request, $response, $token);
$event = new InteractiveLoginEvent($request, $token);
$response->sendHeaders();
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
return $response;
}else{
$token = new CustomToken($user->getId(), $secretKey, $roles);
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('apiUser', serialize($arrayUser));
// Now dispatch the login event
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
}
}
Большое спасибо за вашу помощь




Я меняю эту часть кода следующим образом:
if ($request->get('_remember_me') == 'on'){
//Token to set the REMEMBERME cookie
$token = new UsernamePasswordToken($user->getId(), $user->getPassword(), 'secured_area', $roles);
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('apiUser', serialize($arrayUser));
$rememberMeService = new TokenBasedRememberMeServices([$arrayUser],$this->getParameter('secret'),'secured_area', [
'path' => '/',
'name' => 'REMEMBERME',
'domain' => 'localhost',
'secure' => false,
'httponly' => true,
'lifetime' => 1209600, // 14 days
'always_remember_me' => false,
'remember_me_parameter' => '_remember_me'
]);
и я подключен, когда я вошел в систему с токеном UsernamePasswordToken, но файл cookie не установлен, потому что $ user не представляет реализацию UserInterface
И это моя проблема, я не использую FOSUserBundle или Entity для загрузки пользователя, но пользователь загружается через API
Если мне это нравится:
if ($request->get('_remember_me') == 'on'){
//Token to set the REMEMBERME cookie
$token = new UsernamePasswordToken($user, $user->getPassword(), 'secured_area', $roles);
$this->get('security.token_storage')->setToken($token);
$this->get('session')->set('apiUser', serialize($arrayUser));
$rememberMeService = new TokenBasedRememberMeServices([$arrayUser],$this->getParameter('secret'),'secured_area', [
'path' => '/',
'name' => 'REMEMBERME',
'domain' => 'localhost',
'secure' => false,
'httponly' => true,
'lifetime' => 1209600, // 14 days
'always_remember_me' => false,
'remember_me_parameter' => '_remember_me'
]);
Я получаю эту ошибку: Для пользователя «UserBundle \ Model \ User» не существует провайдера.