为 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");
    };
  }