Angularjs route:阻止用户手动获取json数据

时间:2016-04-30 15:05:56

标签: angularjs laravel

在我的angularjs应用中,我有路由/#/tasks,它从/tasks网址获取任务。如果用户手动转到/tasks url,他会获取json数据。我应该阻止向用户显示json数据吗?什么是最佳做法?例如,在后端我可以检查请求是否是ajax。如果不是 - 重定向到基本网址。后端 - laravel 5

1 个答案:

答案 0 :(得分:1)

从包含关键字“阻止用户”的帖子标题中,您似乎需要某种逻辑来定义特定用户的访问权限。

您可以坚持在用户访问路线 之前解析授权逻辑 。 为此,您可以利用resolve方法的$routeProvider .when()属性。

根据docsresolve属性是......

  

应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。

     

如果所有承诺都成功解决,则会注入已解析的承诺的值,并触发$ routeChangeSuccess事件。如果任何promise被拒绝,则触发$ routeChangeError事件。

解析接受函数(作为可注入的依赖项),每个函数都可以返回 promise ,如果任何promises被拒绝,如引用,则抛出错误并且字面上都不是路由也没有加载视图。

要使授权逻辑起作用,您需要对某些后端函数/服务执行一些API调用,该函数/服务会解析用户被允许用于路由,或者拒绝他/她的请求。

.when('/tasks', {
resolve: {
    authorize: function(authService){
            //some api call to get either acceptance (e.g. status code 200) or rejection (status code 500) for the user being authorized
            return authService.authorize();
        }
    },
    controller: function(){
        //route controller logic
    }
})

或者,如果您还希望在承诺失败时执行某些操作,则可以通过简单地使用catch()处理程序链接promise并抛出错误强制拒绝从catch()本身。

.when('/tasks', {
resolve: {
    authorize: function($location, authService){
        //some api call to get either acceptance or rejection for the user being 
        return authService.authorize()
             .then(function(){
                //some logic on success of the promise
             })
             .catch(function(){
                $location.path('/auth/login/');
                throw 'Authorization error';
             });
        }
    },
    controller: function(){
        //route controller logic
    }
})