为 firebase.com/Parse.com 应用解析 $routeChangeError
resolving $routeChangeError for a firebase.com/Parse.com app
我正在做的是一个简单的登录和身份验证系统,使用来自 AngularJS、Parse.com 和 $routeChangeError.
的 ngRoute
$rootScope.$on('$routeChangeError', function(event, next, previous, error) {
// We can catch the error thrown when the $requireAuth promise is rejected
// and redirect the user back to the home page
if (error === "AUTH_REQUIRED") {
$location.path('/');
}
});
我遵循与应用的 "Wait and Eat" Firebase 示例 (https://github.com/gordonmzhu/angular-course-demo-app-v2/blob/master/src/app/app.module.js) 相同的架构。
在 firebase 中有一个验证用户是否通过身份验证的承诺,当承诺被拒绝时,它 returns 错误字符串 "AUTH_REQUIRED",然后 $routeChangeError 开始,我的页面遥不可及(整洁!!),但是!!!...我想用 Parse.com JS SDK 做同样的事情。目前我使用 Parse.User.current() 进行登录和注册,所以我想继续使用 Parse.com
我的直接问题是:Parse.com 中是否有与 firebase.com $requireAuth() 承诺类似的东西?
我尝试了 Parse.User.currentAsync() 但没有触发 $routeChangeError :(
这里有一些关于 firebase.com $requireAuth() 的文档:
https://www.firebase.com/docs/web/libraries/angular/guide/user-auth.html#section-routers
这是我的授权服务工厂:
(function() {
'use strict';
angular
.module('app.waitList')
.config(configFunction);
configFunction.$inject = ['$routeProvider'];
function configFunction($routeProvider) {
$routeProvider.when('/waitlist', {
templateUrl: 'app/waitList/waitList.html',
controller: 'WaitListController',
controllerAs: 'vm',
resolve: {user: resolveUser}
});
}
resolveUser.$inject = ['authService'];
function resolveUser(authService) {
// return Parse.com - Parse.User.PROMISE??????
return authService.firebaseAuthObject.$requireAuth();
}
})();
应用程序模块:
(function() {
'use strict';
angular
.module('app', [
// Angular modules.
'ngRoute',
// Third party modules.
'firebase',
// Custom modules.
...
])
.config(configFunction)
.run(runFunction);
configFunction.$inject = ['$routeProvider'];
function configFunction($routeProvider) {
$routeProvider.otherwise({
redirectTo: '/'
});
}
runFunction.$inject = ['$rootScope', '$location'];
function runFunction($rootScope, $location) {
$rootScope.$on('$routeChangeError', function(event, next, previous, error) {
// We can catch the error thrown when the $requireAuth promise is rejected
// and redirect the user back to the home page
if (error === "AUTH_REQUIRED") {
$location.path('/');
}
});
}
})();
您可以使用 $q.when
创建承诺并使用 $q.reject
拒绝
function resolveUser(authService, $q) {
var parseUser = authService.parseUser();
if (parseUser.authenticated()) {
return $q.when("AUTH_OK");
} else {
return $q.reject("AUTH_REQUIRED");
};
}
我正在做的是一个简单的登录和身份验证系统,使用来自 AngularJS、Parse.com 和 $routeChangeError.
的 ngRoute$rootScope.$on('$routeChangeError', function(event, next, previous, error) {
// We can catch the error thrown when the $requireAuth promise is rejected
// and redirect the user back to the home page
if (error === "AUTH_REQUIRED") {
$location.path('/');
}
});
我遵循与应用的 "Wait and Eat" Firebase 示例 (https://github.com/gordonmzhu/angular-course-demo-app-v2/blob/master/src/app/app.module.js) 相同的架构。
在 firebase 中有一个验证用户是否通过身份验证的承诺,当承诺被拒绝时,它 returns 错误字符串 "AUTH_REQUIRED",然后 $routeChangeError 开始,我的页面遥不可及(整洁!!),但是!!!...我想用 Parse.com JS SDK 做同样的事情。目前我使用 Parse.User.current() 进行登录和注册,所以我想继续使用 Parse.com
我的直接问题是:Parse.com 中是否有与 firebase.com $requireAuth() 承诺类似的东西?
我尝试了 Parse.User.currentAsync() 但没有触发 $routeChangeError :(
这里有一些关于 firebase.com $requireAuth() 的文档: https://www.firebase.com/docs/web/libraries/angular/guide/user-auth.html#section-routers
这是我的授权服务工厂:
(function() {
'use strict';
angular
.module('app.waitList')
.config(configFunction);
configFunction.$inject = ['$routeProvider'];
function configFunction($routeProvider) {
$routeProvider.when('/waitlist', {
templateUrl: 'app/waitList/waitList.html',
controller: 'WaitListController',
controllerAs: 'vm',
resolve: {user: resolveUser}
});
}
resolveUser.$inject = ['authService'];
function resolveUser(authService) {
// return Parse.com - Parse.User.PROMISE??????
return authService.firebaseAuthObject.$requireAuth();
}
})();
应用程序模块:
(function() {
'use strict';
angular
.module('app', [
// Angular modules.
'ngRoute',
// Third party modules.
'firebase',
// Custom modules.
...
])
.config(configFunction)
.run(runFunction);
configFunction.$inject = ['$routeProvider'];
function configFunction($routeProvider) {
$routeProvider.otherwise({
redirectTo: '/'
});
}
runFunction.$inject = ['$rootScope', '$location'];
function runFunction($rootScope, $location) {
$rootScope.$on('$routeChangeError', function(event, next, previous, error) {
// We can catch the error thrown when the $requireAuth promise is rejected
// and redirect the user back to the home page
if (error === "AUTH_REQUIRED") {
$location.path('/');
}
});
}
})();
您可以使用 $q.when
创建承诺并使用 $q.reject
function resolveUser(authService, $q) {
var parseUser = authService.parseUser();
if (parseUser.authenticated()) {
return $q.when("AUTH_OK");
} else {
return $q.reject("AUTH_REQUIRED");
};
}