我有角度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 }})
答案 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。 :)