Neos\Flow\Security\Context::mergeTokens PHP Method

mergeTokens() protected method

Merges the session and manager tokens. All manager tokens types will be in the result array If a specific type is found in the session this token replaces the one (of the same type) given by the manager.
protected mergeTokens ( array $managerTokens, array $sessionTokens ) : array
$managerTokens array Array of tokens provided by the authentication manager
$sessionTokens array Array of tokens restored from the session
return array Array of Authentication\TokenInterface objects
    protected function mergeTokens($managerTokens, $sessionTokens)
    {
        $resultTokens = [];
        if (!is_array($managerTokens)) {
            return $resultTokens;
        }
        /** @var $managerToken TokenInterface */
        foreach ($managerTokens as $managerToken) {
            $noCorrespondingSessionTokenFound = true;
            if (!is_array($sessionTokens)) {
                continue;
            }
            /** @var $sessionToken TokenInterface */
            foreach ($sessionTokens as $sessionToken) {
                if ($sessionToken->getAuthenticationProviderName() === $managerToken->getAuthenticationProviderName()) {
                    $session = $this->sessionManager->getCurrentSession();
                    $this->securityLogger->log(sprintf('Session %s contains auth token %s for provider %s. Status: %s', $session->getId(), get_class($sessionToken), $sessionToken->getAuthenticationProviderName(), $this->tokenStatusLabels[$sessionToken->getAuthenticationStatus()]), LOG_INFO, null, 'Flow');
                    $resultTokens[$sessionToken->getAuthenticationProviderName()] = $sessionToken;
                    $noCorrespondingSessionTokenFound = false;
                }
            }
            if ($noCorrespondingSessionTokenFound) {
                $resultTokens[$managerToken->getAuthenticationProviderName()] = $managerToken;
            }
        }
        return $resultTokens;
    }