Angular - Logout重定向路由

时间:2013-10-28 12:56:08

标签: angularjs

我正在尝试创建一个清除用户会话并将其重定向回根主页的路由。

.config(function config( $routeProvider, $stateProvider ) {

    $routeProvider.
        when('/logout', {resolve: {redirect: function(Session){
            Session.clear();
            return "/home";
        }}});

我在这里做错了,比如打电话

$location.path("/logout");

...忽略该功能并重定向回默认路由。我已经尝试将console.log语句添加到函数中以查看它是否被调用。

我是否错误地使用了重定向功能?

4 个答案:

答案 0 :(得分:19)

您是否考虑过将退出逻辑放在单独的控制器中?会更干净,更健壮,更安全使重定向更直接。像这样:

function LogoutController($location) {
    Session.clear();
    $location.path('/home');
}

您的路线是:

when('/logout', {
  template: '', //A template or templateUrl is required by AngularJS, even if your controller always redirects.
  controller: 'LogoutController'
}).    

答案 1 :(得分:7)

我遇到了同样的问题而我做的是在我的navigationController中创建一个logout函数,当点击该URL时它会被点击

 <li><a href="" ng-click="logout()" target="_self">Log Out</a></li>

在我的navigationController中:

$scope.logout = function () {
                localStorage.clearAll();
                window.location = '/logout';
            };

我在Angular后面运行ASP.NET所以我需要浏览器(非角度)路由到/ logout,它在ASP.NET配置中映射(执行一些其他会话清理并重定向到身份验证应用程序)

希望这有帮助

答案 2 :(得分:0)

只需存储$ sessionStorage(用户名),然后删除$ sessionStorage(用户名)..

         $scope.logout = function(){
         delete $sessionStorage.sessname; //sessname is get sessionStorage username 
           $location.path('/login');
                     };

帮助我找到这个链接:https://stackoverflow.com/questions/36056745/angularjs-click-logout-button-to-clear-sessionstorage-again-and-again-go-back-to

答案 3 :(得分:0)

我使用这种方法

$routeProvider
      .when('/logout', {
            resolve: {
                logout: ['authService', function (authService) {
                    authService.clear(true);
                }]
            }
        })