除非有cookie,否则Angular会限制对视图的访问

时间:2017-07-03 16:20:35

标签: javascript angularjs cookies angular-ui-router

我有角度ui-router,我限制访问视图,除非cookie处于活动状态。

我在我将cookie设置为用户电子邮件地址的帖子中设置了我的cookie。

我知道如果用户有cookie用户名,则只允许用户访问该视图。

我该怎么做?

设置cookie

let forwardBaseUrl = 'https://www.usergems.com/api/gmail/info?' + $.params({
                event: 'Click forwarded link',
                email: btoa(userEmail),
                properties: {
                    forwardId: btoa(forwardId),
                    forwardUrl: 'http://google.at'
                }
            });

路由器

forwardBaseUrl.params.push({properties: { forwardUrl }})

2 个答案:

答案 0 :(得分:2)

您可以使用ui-router中的resolve属性,只需在状态定义中添加字段resolve,如果不满足条件,则将用户重定向到其他状态(例如登录状态)

state('user', {
  url: '/',
  templateUrl: 'UserView.html',
  controller: 'UserViewController',
  resolve: {
    check: function($q, $cookies) {
      if ($cookies.get('UserName')){ //cookie to check
        return $q.resolve({});
      } else{
        return $q.reject({redirectState: 'loginState'}); 
      }
    }
  }
});

然后添加错误处理程序以检测任何错误

$rootScope.$on('$stateChangeError', function(evt, to, toParams, from, fromParams, error) {
  if (error.redirectState) {
    $state.go(error.redirectState);
  } 
})

答案 1 :(得分:0)

卡里姆给出的答案是好的,应该运作良好。但是,这就像在流程的第二步采取行动一样。

处理此问题的最佳方法是,只有在设置了Cookie时,才能为用户提供导航到此URL的方法。您可以禁用链接或完全隐藏它。 IMO,这是一种更好的方法。

我宁愿实现它,以使我的应用程序健壮。这意味着,禁用/删除链接/按钮将阻止用户访问链接。并且Router-Resolve将保护智能用户谁可以复制粘贴链接或在浏览器上按Enter / F5。 :)