【问题标题】:How to secure Angular routes with Firebase v3?如何使用 Firebase v3 保护 Angular 路由?
【发布时间】:2017-02-11 20:36:08
【问题描述】:

我想使用 Firebase V3、AngularJS 和 ui.router 保护我网站上的各种路由。

This 看起来像一个类似的问题。我已按照该 SO 帖子中的步骤进行操作,但它对我不起作用。

我预计会发生什么: 单击常见问题解答链接时,如果注销,我应该被转发到登录页面,并且应该在登录时显示常见问题解答页面。

实际发生的情况: 根本无法访问常见问题解答页面。登录没有任何区别。注销时它也不会将我转发到登录页面。

我在run 函数中收到此错误。

ReferenceError: Firebase is not defined(…)       

我已经在页面上包含了 AngularFire,如果我没有收到模块注入器错误,即使我从依赖项数组中删除了 Firebase。

var app = angular.module('app', ['ui.router', 'firebase']);
app.constant('FirebaseDatabaseUrl', 'https://myfbdb.firebaseio.com');
app.config(function($stateProvider, $urlRouterProvider, $firebaseRefProvider, FirebaseDatabaseUrl) {
    $firebaseRefProvider.registerUrl(FirebaseDatabaseUrl);
// If a route other than status is requested,
// go to the auth route
//$urlRouterProvider.otherwise('/logintest/login');

$stateProvider
    .state('login', {
        url: '/login',
        templateUrl: 'pages/login.html',
        controller: 'LoginController as login'
    })

    .state('faq', {
        url: '/faq',
        templateUrl: 'pages/faq.html',
        controller: 'FaqController as faq',
        resolve: {
          // controller will not be loaded until $requireSignIn resolves
          "firebaseUser": ["$firebaseAuthService", function($firebaseAuthService) {
            console.log('waitForSignIn')
                    // $waitForSignIn returns a promise so the resolve waits for it to complete
                    return $firebaseAuthService.$waitForSignIn();
            }]
          } 

    })
    .state('about', {
        url: '/about',
        templateUrl: 'pages/about.html',
        controller: 'AboutController as about',
        resolve: {
          // controller will not be loaded until $requireSignIn resolves
          "firebaseUser": ["$firebaseAuthService", function($firebaseAuthService) {
            // If the promise is rejected, it will throw a $stateChangeError
            return $firebaseAuthService.$requireSignIn();
          }]
        }           
    })

});



app.controller('FaqController', ['$scope', 'firebaseUser', function($scope, firebaseUser){
console.log('faq')
}]);





app.run(["$rootScope", "$state", function($rootScope, $state) {
  console.log('run');
  $rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
 // We can catch the error thrown when the $requireSignIn promise is rejected
 // and redirect the user back to the home page
 if (error === "AUTH_REQUIRED") {
    console.log('redirecting to login page')
   $state.go("login");
 }
 });
  }]);

【问题讨论】:

  • 您使用的是旧版本的 AngulsrFire。你的版本号是多少?
  • 您好,谢谢您的回复。我正在使用 v1.2.0。
  • 这就是问题所在。升级到 2.0+
  • 是的,非常感谢,升级到 2.0.2 并且现在可以使用了 - 抱歉。我已经在它上面花了很长时间 sigh 大声笑......我想我在网站上看到它已被弃用,并没有考虑升级它。
  • 一切都好!我添加了一个答案来关闭它:)

标签: angularjs firebase firebase-authentication angularfire


【解决方案1】:

AngularFire 2.0+ 版本与 Firebase 3.0 兼容。低于 AngularFire 2.0 的任何内容都适用于旧版 Firebase。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 2018-01-27
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    相关资源
    最近更新 更多