разрешение $ routeChangeError для приложения firebase.com/Parse.com

0

То, что я делаю, это простая система входа и аутентификации, использующая 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('/');
      }
    });
  }

})();
Теги:
firebase
parse.com
firebase-authentication

1 ответ

1
Лучший ответ

Вы можете создать обещание с $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");
    };
  }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню