То, что я делаю, это простая система входа и аутентификации, использующая ngRoute из AngularJS, Parse.com и $ routeChangeError.
$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('/');
}
});
Я следую той же архитектуре, что и пример "Подождите и поедает" Firebase (https://github.com/gordonmzhu/angular-course-demo-app-v2/blob/master/src/app/app.module.js).
В firebase есть обещание проверить, является ли пользователь аутентифицированным или нет, и он возвращает строку ошибки "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
Это моя фабрика обслуживания Auth:
(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");
};
}