【发布时间】:2016-02-19 23:03:57
【问题描述】:
我想让人们根据我成功实现的 firebase 规则中设置的权限登录和拒绝访问特定状态。
我想避免“页面闪烁”重定向。
我遵循了“Auth”状态重定向代码,但我无法在“return $firebaseObject(ref2);”留下的对象中获取 PERMISSION_DENIED 代码
myapp.factory("Auth", function($firebaseAuth) {
var ref = new Firebase("https://xxxx.firebaseio.com/");
return $firebaseAuth(ref);
});
//myedit, got rid of this factory
///myapp.factory("notLive", function($firebaseObject) {
/// var ref2 = new Firebase("https://xxxx.firebaseio.com/events");
/// return $firebaseObject(ref2);
///});
// for ui-router
myapp.run(["$rootScope", "$state", function($rootScope, $state) {
$rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error, code) {
if (error === "AUTH_REQUIRED") {
$state.go("home");
}
console.log(code); // returns undefined :(
///myedit - changed this
///if (code === "PERMISSION_DENIED") {
if (error.code === "PERMISSION_DENIED") {
$state.go("home");
}
});
}]);
这是我的决心
.state("events", {
url: "/events",
templateUrl: "tpl/events.html",
controller: "eventsCtrl",
resolve: {
currentAuth: function(Auth) {
console.log(Auth.$requireAuth());
return Auth.$requireAuth();
},
///myedit - changed this
///notLive: function(notLive) {
/// console.log(notLive.$loaded());
/// return notLive.$loaded();
///}
notLive: function($firebaseObject) {
var refEvents = new Firebase("https://xxxxx.firebaseio.com/events");
return $firebaseObject(refEvents).$loaded();
}
}
})
当我的用户被“事件”节点拒绝时,他们看不到很棒的数据,但我希望他们重定向到主状态并保持登录状态。
我在“eventsCtrl”中放置了一个黑客重定向,但它在被重定向到我不想要的“home”状态之前闪烁。
MYEDIT - 我把它放在事件的顶部Ctrl
var refPermissionDeniedEvents = new Firebase("https://xxxxx.firebaseio.com/events");
refPermissionDeniedEvents.on("value", function(snapshot) {
}, function(err){
$state.go("home", {}, { reload: true });
});
完成此操作后,它使用户能够登录并通过身份验证并坐在主页上,除非我在 USERS 节点中更改他们的权限并且在 EVENTS 上设置权限规则,否则他们将被拒绝访问事件页面节点。
这样做之后,我已经达到了我所需要的。
【问题讨论】:
-
我改变了一些东西并设法让它工作,见 myedit
标签: angularjs angular-ui-router firebase angularfire firebase-security