Symfony 3.4 Помните, что я не работаю после перезапуска браузера

Я настроил функцию входа в систему с помощью 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);
    }

} 

Большое спасибо за вашу помощь

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
175
1

Ответы 1

Я меняю эту часть кода следующим образом:

 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» не существует провайдера.

Другие вопросы по теме