diff --git a/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php b/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php new file mode 100644 index 0000000..7148709 --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php @@ -0,0 +1,33 @@ +getRequirements()); + } + + /** + * {@inheritdoc} + */ + public function access(Route $route, Request $request) { + return (bool) $GLOBALS['user']->uid; + } + +} diff --git a/core/modules/user/lib/Drupal/user/UserAutocompleteController.php b/core/modules/user/lib/Drupal/user/Controller/UserAutocompleteController.php similarity index 94% rename from core/modules/user/lib/Drupal/user/UserAutocompleteController.php rename to core/modules/user/lib/Drupal/user/Controller/UserAutocompleteController.php index 7e294f5..46745ec 100644 --- a/core/modules/user/lib/Drupal/user/UserAutocompleteController.php +++ b/core/modules/user/lib/Drupal/user/Controller/UserAutocompleteController.php @@ -2,15 +2,16 @@ /** * @file - * Contains \Drupal\user\UserAutocompleteController. + * Contains \Drupal\user\Controller\UserAutocompleteController. */ -namespace Drupal\user; +namespace Drupal\user\Controller; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\ControllerInterface; +use Drupal\user\UserAutocomplete; /** * Controller routines for taxonomy user routes. @@ -79,4 +80,3 @@ public function autocompleteUserAnonymous(Request $request) { } } - diff --git a/core/modules/user/lib/Drupal/user/Controller/UserController.php b/core/modules/user/lib/Drupal/user/Controller/UserController.php new file mode 100644 index 0000000..b310165 --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Controller/UserController.php @@ -0,0 +1,68 @@ +moduleHandler = $module_handler; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('module_handler') + ); + } + + /** + * Logs the current user out. + * + * @param \Symfony\Component\HttpFoundation\Request $request + * The current request. + * + * @return \Symfony\Component\HttpFoundation\RedirectResponse + * A redirection to home page. + */ + public function logout(Request $request) { + global $user; + + watchdog('user', 'Session closed for %name.', array('%name' => $user->name)); + $this->moduleHandler->invokeAll('user_logout', array($user)); + // Destroy the current session, and reset $user to the anonymous user. + session_destroy(); + // @todo Remove the destination check once drupal.org/node/1668866 is in. + $url = $request->query->get('destination') ?: ''; + return new RedirectResponse(url($url, array('absolute' => TRUE))); + } + +} diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 322311f..39c89c3 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -906,11 +906,9 @@ function user_menu() { $items['user/logout'] = array( 'title' => 'Log out', - 'access callback' => 'user_is_logged_in', - 'page callback' => 'user_logout', + 'route_name' => 'user_logout', 'weight' => 10, 'menu_name' => 'account', - 'file' => 'user.pages.inc', ); // User listing pages. diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc index 5f0cfab..13e613b 100644 --- a/core/modules/user/user.pages.inc +++ b/core/modules/user/user.pages.inc @@ -163,7 +163,7 @@ function user_pass_reset($form, &$form_state, $uid, $timestamp, $hashed_pass, $a } /** - * Menu callback; logs the current user out, and redirects to the home page. + * Logs the current user out, and redirects to the home page. */ function user_logout() { global $user; diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index 409b033..fb49de3 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -5,17 +5,24 @@ user_register: requirements: _access_user_register: 'TRUE' +user_logout: + pattern: '/user/logout' + defaults: + _controller: '\Drupal\user\Controller\UserController::logout' + requirements: + _user_is_logged_in: 'TRUE' + user_autocomplete: pattern: '/user/autocomplete' defaults: - _controller: '\Drupal\user\UserAutocompleteController::autocompleteUser' + _controller: '\Drupal\user\Controller\UserAutocompleteController::autocompleteUser' requirements: _permission: 'access user profiles' user_autocomplete_anonymous: pattern: '/user/autocomplete/anonymous' defaults: - _controller: '\Drupal\user\UserAutocompleteController::autocompleteUserAnonymous' + _controller: '\Drupal\user\Controller\UserAutocompleteController::autocompleteUserAnonymous' requirements: _permission: 'access user profiles' diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml index 77f93e2..468955d 100644 --- a/core/modules/user/user.services.yml +++ b/core/modules/user/user.services.yml @@ -11,6 +11,10 @@ services: class: Drupal\user\Access\RoleAccessCheck tags: - { name: access_check } + access_check.user.login_status: + class: Drupal\user\Access\LoginStatusCheck + tags: + - { name: access_check } user.data: class: Drupal\user\UserData arguments: ['@database']