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..c186c0e --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Access/LoginStatusCheck.php @@ -0,0 +1,32 @@ +getRequirements()); + } + + /** + * Implements AccessCheckInterface::access(). + */ + public function access(Route $route, Request $request) { + return (bool) $GLOBALS['user']->uid; + } +} diff --git a/core/modules/user/lib/Drupal/user/Controller/UserActivityController.php b/core/modules/user/lib/Drupal/user/Controller/UserActivityController.php new file mode 100644 index 0000000..fb7b967 --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Controller/UserActivityController.php @@ -0,0 +1,40 @@ +get('database')); + } + + /** + * logs the current user out, and redirects to the home page. + */ + public function logout(){ + global $user; + watchdog('user', 'Session closed for %name.', array('%name' => $user->name)); + + \Drupal::moduleHandler()->invokeAll('user_logout', $user); + + // Destroy the current session, and reset $user to the anonymous user. + session_destroy(); + + drupal_goto(); + } +} diff --git a/core/modules/user/user.module b/core/modules/user/user.module index d4bb74b..f9da38d 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -924,11 +924,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.routing.yml b/core/modules/user/user.routing.yml index 0798e1d..377c25b 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -25,3 +25,10 @@ user_account_settings: _form: '\Drupal\user\AccountSettingsForm' requirements: _permission: 'administer users' + +user_logout: + pattern: '/user/logout' + defaults: + _controller: '\Drupal\user\Controller\UserActivityController::logout' + requirements: + _user_is_logged_in: 'TRUE' 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']