Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJs-限制访问';登录';使用者_Javascript_Angularjs_Routes - Fatal编程技术网

Javascript AngularJs-限制访问';登录';使用者

Javascript AngularJs-限制访问';登录';使用者,javascript,angularjs,routes,Javascript,Angularjs,Routes,我正在为我正在创建的应用程序设置登录系统 我可以设置用户登录或注销时的cookies。我不认为如果用户登录,测试每个视图是一个非常优雅的解决方案,我担心这里和那里的页面可能会出现漏洞(这是一个相当大的应用程序) 我认为最好的方法是以某种方式拦截路由更改,并检查用户是否已登录,否则将其发送到登录/创建用户页面。我已经找到了一些方法,但似乎没有正式的文档记录。有人在现实世界中使用过这种方法吗?它有效吗 我的路由文件如下所示: 'use strict'; app.config(['$routePro

我正在为我正在创建的应用程序设置登录系统

我可以设置用户登录或注销时的cookies。我不认为如果用户登录,测试每个视图是一个非常优雅的解决方案,我担心这里和那里的页面可能会出现漏洞(这是一个相当大的应用程序)

我认为最好的方法是以某种方式拦截路由更改,并检查用户是否已登录,否则将其发送到登录/创建用户页面。我已经找到了一些方法,但似乎没有正式的文档记录。有人在现实世界中使用过这种方法吗?它有效吗

我的路由文件如下所示:

'use strict';

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
        // LOGIN
        .when('/User/LoginUser', {templateUrl: 'views/user/login.html',controller: 'loginCtrl'})

    ....... more routes here.......

        // DEFAULT
        .otherwise({redirectTo: '/'});
}]);
$routeProvider
    // LOGIN
    .when('/User/LoginUser', {templateUrl: 'views/user/login.html',controller: 'loginCtrl', isLogin: true})

任何帮助或建议,或指向我将如何做这件事的真实世界实例的点,都将不胜感激

您可以根据建议截取路线更改,并根据以下示例采取相应行动:

    $rootScope.$on('$routeChangeStart', function (event, next) {
        var userAuthenticated = ...; /* Check if the user is logged in */

        if (!userAuthenticated && !next.isLogin) {
            /* You can save the user's location to take him back to the same page after he has logged-in */
            $rootScope.savedLocation = $location.url();

            $location.path('/User/LoginUser');
        }
    });
另外,将
isLogin:true
添加到登录页面的路由定义中,如下所示:

'use strict';

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
        // LOGIN
        .when('/User/LoginUser', {templateUrl: 'views/user/login.html',controller: 'loginCtrl'})

    ....... more routes here.......

        // DEFAULT
        .otherwise({redirectTo: '/'});
}]);
$routeProvider
    // LOGIN
    .when('/User/LoginUser', {templateUrl: 'views/user/login.html',controller: 'loginCtrl', isLogin: true})
祝你的项目好运

我的意见:

<?php if (!$_SESSION['user_id'] { forward(/user/access); }) ?>


这是你的angular应用程序…

我的第一个想法跳到了“服务器端”和“会话”这里。我在我的应用程序中也使用路由,我使用ajax调用会话数据。我使用它来确定用户角色以及用户登录会话状态。服务器端不是一个选项@Asok我希望有一个更高级别的解决方案,这样我就不必反复询问服务器用户是否登录了。感谢您的帮助!添加“isLogin:true”有什么作用?它没有在最新的angularJS文档中记录
isLogin
不是
angular router
API的一部分,它只是我们在
$routeChangeStart
侦听器实现中检查的一个变量(请参阅
if
语句),这是检查下一个路由的isLogin。什么是用户刷新同一个页面,它不重定向吗?现在是2014年。我们可以做得更好。:-)我相信这是有办法的,但在某些应用程序(例如网上银行)中,即使没有价值或信息,也不能只显示网上银行帐户的可视界面。我会删除这个答案以避免2年前的耻辱,我仍然这样认为,在没有任何问题的情况下做了几个角度的应用之后。我通常会改变主意,在这种情况下,我没有,我仍然相信,在某些情况下,即使是简单的,无用的界面代码,显示也是一种风险。你显然不是在保安部门工作。