javascript - AuglarFire 使用路由器进行身份验证引发未知提供商错误

标签 javascript angularjs firebase angularfire

所以我在这里关注 firebase 文档 authentication with Routers 。相反,我使用 Ionic/ui-router 并具有抽象 View 和带有 Controller 的实际 View 。结构如下:

.state('auth', {
  url: "/auth",
  abstract: true,
  templateUrl: "app/auth/auth.html",
  resolve: {
    "currentAuth": ["Auth", function(Auth){
      // $waitForAuth returns a promise so the resolve waits for it to complete
      return Auth.$waitForAuth();
    }]
  }
})
.state('auth.signin', {
  url: '/signin',
  views: {
    'auth-signin': {
      templateUrl: 'app/auth/auth-signin.html',
      controller: 'SignInCtrl'
    }
  }
})
.state('home', {
  cache: false,
    abstract: true,
    url: "/home",
    templateUrl: "app/home/home.html",
  controller: 'homeTabCtrl',
  resolve: {
    "currentAuth": ["Auth", function(Auth){
      // $requireAuth returns a promise so the resolve waits for it to complete
      // If the promise is rejected, it will throw a $stateChangeError (see above)
      return Auth.$requireAuth();
    }]
  }
})

.state('home.courses', {
  cache: false,
  url: "/courses",
  views: {
    "tab-courses": {
      templateUrl: "app/home/courses.html",
      controller: "courseCtrl"
    }
  }
})

所以它工作得很好。当我在未登录的情况下访问 home.courses 时,我会重定向到 auth.signin。但我想在 SignInCtrl 中获取 currentAuth 返回对象/ promise 。因此,当用户登录时,如果他们进入 auth.signin 状态,它会将他们重定向到 home.courses。我按照文档说明将 currentAuth 注入(inject) Controller 中,如下所示:

(function () {
'use strict';
angular.module("myApp").controller('SignInCtrl', ['currentAuth', '$scope', '$rootScope', SignInCtrl]);

function SignInCtrl(currentAuth, $scope, $rootScope){
    console.log (currentAuth);
}

})();

它抛出错误:

Error: [$injector:unpr] Unknown provider: currentAuthProvider <- currentAuth <- SignInCtrl

我做了与文档示例相同的操作,并尝试获取 currentAuth promise 对象(以便在 currentAuth 不为 NULL 时使用 if 语句将用户重定向到 home.courses)。但它不起作用:(请帮助 firebase 团队。

更新:

根据 Kato 的说法,我将无法访问 currentAuth promise 。那么,如果用户位于/auth/signin/路径中,则查看用户是否已登录并将其重定向到/home/courses/路径的传统方法是什么?

最佳答案

该错误信息非常丰富;这是 101 号路线,并且已经在 Stack Overflow 上被报道了数十次。这里的关键是理解 currentAuth 不是服务或模块(您已尝试将其作为模块和服务包含在此处),而是在调用特定路由时由解析方法注入(inject).

因此,

currentAuth 对于 /signin 路径不可用,因为该路由没有 resolve。由于以下解决方案,它可用于“home”路线:

  resolve: {
    "currentAuth": ["Auth", function(Auth){

因此,您也不能在/signin 中使用该数据,除非您还为在那里注入(inject)该数据的路由创建了一个解析,这应该是多余的,因为如果 authData 为 null,您只将它们发送到/signin。

关于javascript - AuglarFire 使用路由器进行身份验证引发未知提供商错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944694/

相关文章:

javascript - d3js 奇怪的日期和数据处理

javascript - html 2 div 插件中 css rotatey 的解决方案是什么?

php - 用于 PHP 的服务器端 Web 浏览器?

Angular Firebase ngIf 用户经过身份验证监听器在页面重新加载时不起作用

javascript - 云函数本地 HTTP 触发器

javascript - 将下一个元素与jquery中选定的元素一起删除

javascript - 如何让 lodash 与 Angular JS 一起工作?

javascript - 如何使用 ng-model 属性将 '%' 字符添加到输入 View ?

javascript - .length 不适用于 $resource 导致 angularjs

javascript - ionic 1 与 Firebase 3 从快照获取 key ?