Chris@0: sessionConfiguration = $session_configuration; Chris@0: $this->connection = $connection; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function applies(Request $request) { Chris@0: return $request->hasSession() && $this->sessionConfiguration->hasSession($request); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function authenticate(Request $request) { Chris@0: return $this->getUserFromSession($request->getSession()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the UserSession object for the given session. Chris@0: * Chris@0: * @param \Symfony\Component\HttpFoundation\Session\SessionInterface $session Chris@0: * The session. Chris@0: * Chris@0: * @return \Drupal\Core\Session\AccountInterface|null Chris@0: * The UserSession object for the current user, or NULL if this is an Chris@0: * anonymous session. Chris@0: */ Chris@0: protected function getUserFromSession(SessionInterface $session) { Chris@0: if ($uid = $session->get('uid')) { Chris@0: // @todo Load the User entity in SessionHandler so we don't need queries. Chris@0: // @see https://www.drupal.org/node/2345611 Chris@0: $values = $this->connection Chris@0: ->query('SELECT * FROM {users_field_data} u WHERE u.uid = :uid AND u.default_langcode = 1', [':uid' => $uid]) Chris@0: ->fetchAssoc(); Chris@0: Chris@0: // Check if the user data was found and the user is active. Chris@0: if (!empty($values) && $values['status'] == 1) { Chris@0: // Add the user's roles. Chris@0: $rids = $this->connection Chris@0: ->query('SELECT roles_target_id FROM {user__roles} WHERE entity_id = :uid', [':uid' => $values['uid']]) Chris@0: ->fetchCol(); Chris@0: $values['roles'] = array_merge([AccountInterface::AUTHENTICATED_ROLE], $rids); Chris@0: Chris@0: return new UserSession($values); Chris@0: } Chris@0: } Chris@0: Chris@0: // This is an anonymous session. Chris@0: return NULL; Chris@0: } Chris@0: Chris@0: }