2 declare(strict_types = 1);
18 use Psr\Http\Message\ResponseInterface;
19 use Psr\Http\Message\ServerRequestInterface;
20 use Psr\Http\Server\MiddlewareInterface;
21 use Psr\Http\Server\RequestHandlerInterface;
42 public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
44 $frontendUser = GeneralUtility::makeInstance(FrontendUserAuthentication::class);
47 $pid = $request->getParsedBody()[
'pid'] ?? $request->getQueryParams()[
'pid'] ?? 0;
49 $frontendUser->checkPid_value = implode(
',', GeneralUtility::intExplode(
',', $pid));
53 $frontendSessionKey = $request->getParsedBody()[
'FE_SESSION_KEY'] ?? $request->getQueryParams()[
'FE_SESSION_KEY'] ??
'';
54 if ($frontendSessionKey) {
59 $frontendUser->start();
60 $frontendUser->unpack_uc();
63 $GLOBALS[
'TSFE']->fe_user = $frontendUser;
68 if (!empty(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'tslib/class.tslib_fe.php'][
'initFEuser'])) {
69 trigger_error(
'The "initFEuser" hook will be removed in TYPO3 v10.0 in favor of PSR-15. Use a middleware instead.', E_USER_DEPRECATED);
70 $_params = [
'pObj' => &
$GLOBALS[
'TSFE']];
71 foreach (
$GLOBALS[
'TYPO3_CONF_VARS'][
'SC_OPTIONS'][
'tslib/class.tslib_fe.php'][
'initFEuser'] as $_funcRef) {
72 GeneralUtility::callUserFunction($_funcRef, $_params,
$GLOBALS[
'TSFE']);
79 return $handler->handle($request);
94 ServerRequestInterface $request,
95 string $frontendSessionKey
96 ): ServerRequestInterface {
97 list($sessionId, $hash) = explode(
'-', $frontendSessionKey);
99 if (hash_equals(md5($sessionId .
'/' .
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'encryptionKey']), (
string)$hash)) {
104 $_COOKIE[$cookieName] = $sessionId;
105 if (isset($_SERVER[
'HTTP_COOKIE'])) {
107 $_SERVER[
'HTTP_COOKIE'] .=
';' . $cookieName .
'=' . $sessionId;
110 $cookieParams = $request->getCookieParams();
111 $cookieParams[$cookieName] = $sessionId;
112 $request = $request->withCookieParams($cookieParams);
115 $frontendUser->forceSetCookie =
true;
116 $frontendUser->dontSetCookie =
false;
129 $context->
setAspect(
'frontend.user', GeneralUtility::makeInstance(UserAspect::class, $user));