使用Angular和Meteor在注销时立即重定向用户

时间:2015-12-24 07:42:05

标签: javascript angularjs node.js meteor angular-meteor

在使用角度的Meteor应用程序中,有一种状态需要用户登录。

目前使用$meteor.requireUser()

完成此操作
function run($rootScope, $state) {
    $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
        if(error === 'AUTH_REQUIRED') {
            $state.go('login')
        }
    })
}

.state('secretzone', {
    url: '/secret/zone',
    templateUrl: 'client/secret/views/zone.ng.html',
    controller: 'SecretZoneCtrl',
    resolve: {
        "currentUser": ["$meteor", function($meteor){
            return $meteor.requireUser();
        }]
    }
})

问题:当用户当前处于secretzone状态并注销时,应将其重定向到login状态,但仍保留在同一页面上他刷新了这个页面。

如果用户已经在需要进行身份验证的页面上,我们如何强制用户在注销时重定向到login状态?

这可以仅使用UI路由器完成,就像使用Blaze时使用Iron Router轻松实现的那样吗?

3 个答案:

答案 0 :(得分:0)

我能想到的一种方法是在你的注销成功处理程序中调用$ state.reload()。

顾名思义,这将重新加载当前状态,因此在这种情况下,secretzone会导致调用解析逻辑,从而抛出错误以便由$ stateChangeError处理程序获取。

答案 1 :(得分:0)

如果您有注销功能,为什么不直接在该功能中调用$state.go('login')

答案 2 :(得分:0)

你可以$ watch或Meteor.Autorun当前的用户变量并添加一个重定向到登录界面的逻辑。

如果您使用$ rootScope.currentUser,则使用$ watch,如果您使用的是Meteor.currentUser,请使用Meteor.autorun