我正在尝试创建一个清除用户会话并将其重定向回根主页的路由。
.config(function config( $routeProvider, $stateProvider ) {
$routeProvider.
when('/logout', {resolve: {redirect: function(Session){
Session.clear();
return "/home";
}}});
我在这里做错了,比如打电话
$location.path("/logout");
...忽略该功能并重定向回默认路由。我已经尝试将console.log语句添加到函数中以查看它是否被调用。
我是否错误地使用了重定向功能?
答案 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');
};
答案 3 :(得分:0)
我使用这种方法
$routeProvider
.when('/logout', {
resolve: {
logout: ['authService', function (authService) {
authService.clear(true);
}]
}
})