【问题标题】:Angularjs route: prevent user to manually get json dataAngularjs路由:防止用户手动获取json数据
【发布时间】:2016-05-01 00:39:35
【问题描述】:

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

【问题讨论】:

    标签: angularjs laravel


    【解决方案1】:

    从带有关键字“prevent user”的帖子标题来看,您似乎需要某种逻辑来定义特定用户的访问权限。

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

    根据docsresolve 属性是...

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

    如果所有的 Promise 都成功解决,则注入已解决的 Promise 的值并触发 $routeChangeSuccess 事件。如果任何一个 Promise 被拒绝,$routeChangeError 事件就会被触发。

    resolve 接受函数(作为可注入的依赖项),每个函数都可能返回一个 promise,如果任何一个 promise 被拒绝,如引用的那样,就会抛出一个错误,从字面上看,路由都不会视图也没有加载。

    要使授权逻辑正常工作,您需要对某个后端函数/服务执行一些 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
        }
    })
    

    或者,如果您还想在 promise 失败时执行某些操作,您可以通过简单地将 promise 与 catch() 处理程序链接并抛出错误来强制拒绝从 @ 返回的 promise 987654329@自己。

    .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
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多