【问题标题】:AngularJS Authentication issue with query parameter?查询参数的AngularJS身份验证问题?
【发布时间】:2013-12-21 12:21:01
【问题描述】:

为了处理身份验证,我使用 $locationChangeStart。我的代码适用于不包含任何参数或查询字符串的 routeProvider。如果路由提供程序包含任何查询参数,我的代码不能正常工作。

app.config(['$routeProvider', function($routeProvider,$locationProvider) {
    $routeProvider.when('/login', {templateUrl: 'partials/login.html', controller: 'AuthController',auth:false});
    $routeProvider.when('/register', {templateUrl: 'partials/signup.html', controller: 'AuthController',auth:false});
    $routeProvider.when('/', {templateUrl: 'partials/:id', controller: 'TestCntrl',auth:false});
    $routeProvider.otherwise({redirectTo: '/login'});
}]).run(function($rootScope, $route, $location, AutenticationService) {

    $rootScope.$on('$locationChangeStart', function(ev, next, current) {

        var nextPath = $location.path();
        var nextRoute = $route.routes[nextPath]

        if(nextRoute.auth && !AutenticationService.isLoggedIn()){
            $location.path("/login");
            // event.preventDefault();
        }
    });
})

在上面的代码中,nextRoute 检查映射 url 并获取属性 auth,该属性存在于 $routeProvider 中。但是如果 url 包含查询参数 nextRoute.auth 给出不明确的。因为如果此身份验证不起作用。

任何想法,如果 URL 包含查询字符串,如何处理身份验证

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    只需添加一个检查以查看 nextRoute 是否不虚假(即未定义)。当第一次路由更改被触发时,我遇到了这个问题。初始路径通常是一个空字符串,不被任何路由引用。

    if(nextRoute && nextRoute.auth && !AutenticationService.isLoggedIn()){
        $location.path("/login");
    }
    

    这是一个稍作修改的示例。您可以在控制台中看到位置的变化。 http://plnkr.co/edit/oE2Ew8C68t8k8EgKNqtz?p=preview

    另一个选择是利用这个项目: https://github.com/fnakstad/angular-client-side-auth

    这是一个工作演示: http://angular-client-side-auth.herokuapp.com/login

    【讨论】:

    • 我已经添加了这个检查,但是每次登录页面都会显示
    • 听起来不错,可以来聊天室。我必须解释一些事情,这样你就会清楚
    • 当然。如何发起聊天?
    • 这里的问题是,如果 nextRoute 值未定义,那么 nextRout.auth 将不起作用。因为这个 if 条件没有执行
    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2016-11-02
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多