Мы используем аутентификатор Guard в приложении Symfony для аутентификации через внешнее приложение.В методе getCredentials
нашей реализации AbstractGuardAuthenticator
мы используем метод migrate
в сеансе запроса для обновления сеанса.
/**
* Called on every request and refreshes the user's session.
* Attempts to get credentials (i.e. a token) from a request:
* If a token is present, attempts to log a user in. Continues to the getUser method.
* If there is no token a user is logged in, the request continues.
* If there is no token and there is no logged in user, sends the User to authenticate.
*
* @param Request $request The current request
* @return array|null If there is a token present, it is returned in an array; otherwise null is returned
*/
public function getCredentials(Request $request)
{
// Update the session lifetime
// The migrate method regenerates the session to a new session id, but preserves
// all attributes. The first parameter is set to true so that the old session
// is destroyed, and the second parameter resets the lifetime to 30 minutes.
$request->getSession()->migrate(true, 30 * 60);
// Check query params for token
$token = $request->query->get('token');
// When no token is provided:
// If user is logged in, skip authentication steps
// If no user is logged in, go to start method to authenticate
if($token == null)
return null;
// Token provided, continue to getUser
return ['token' => $token];
}
При работе на PHP 7.1 это работает нормально.Метод migrate
возвращает true, что указывает на успешную миграцию, в соответствии с документами .При работе на PHP 7.2 я получаю эту ошибку:
Symfony\Component\Debug\Exception\ContextErrorException:
Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time
at vendor\symfony\symfony\src\Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage.php:201
at Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->regenerate(true, 1800)
(vendor\symfony\symfony\src\Symfony\Component\HttpFoundation\Session\Session.php:185)
at Symfony\Component\HttpFoundation\Session\Session->migrate(true, 1800)
(vendor\OrgOne\authentication-bundle\OrgOne\AuthenticationBundle\Security\TokenAuthenticator.php:55)
at OrgOne\AuthenticationBundle\Security\TokenAuthenticator->getCredentials(object(Request))
(vendor\symfony\symfony\src\Symfony\Component\Security\Guard\Firewall\GuardAuthenticationListener.php:118)
Как мы должны использовать метод migrate
или что-то подобное в PHP 7.2?