firebaseAuth,如何检查用户是否已登录

时间:2015-01-31 04:45:36

标签: angularjs authentication firebase angularjs-routing firebasesimplelogin

路线:

var app = angular
  .module('defexApp', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngSanitize',
    'ngTouch',
    'firebase'
  ])
  .constant('FIREBASE_URL', 'https://defex.firebaseio.com/')
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/landing.html',
      })
      .when('/add', {
        templateUrl: 'views/defects.html',
        controller: 'DefectCtrl'
      })
      .when('/login', {
        templateUrl: 'views/login.html',
        controller: 'AuthCtrl',
        resolve: {
          currentUser: function(Auth) {
            return Auth.signedIn();
          }
        }
      })
      .when('/register',{
        templateUrl: 'views/register.html',
        controller: 'AuthCtrl',
        resolve: {
          currentUser: function(Auth) {
            return Auth.signedIn();
          }
        }
      })
      .when('/defects/:defectId', {
        templateUrl: 'views/defectview.html',
        controller: 'DefectViewCtrl',
        resolve: {
          currentUser: function(Auth) {
            return Auth.resolveUser();
          }
        }
      })
      .when('/defectlist', {
        templateUrl: 'views/defectList.html',
        controller: 'DefectCtrl',
        resolve: {
          currentUser: function(Auth) {
            return Auth.resolveUser();
          }
        }
      })
      .otherwise({
        redirectTo: '/'
      });
  });

服务:

'use strict';

app.factory('Auth', function($firebase, $firebaseAuth, FIREBASE_URL) {

 var ref = new Firebase(FIREBASE_URL);
 var auth = $firebaseAuth(ref);

 var Auth = {
    register: function(user) {
        return auth.$createUser({email: user.email, password: user.password});
    },
    login: function(user) {
        return auth.$authWithPassword({email: user.email, password: user.password});
    },
    logout: function() {
        return auth.$unauth();
    },
    resolveUser: function() {
        return auth.$requireAuth();
    },
    signedIn: function() {
        return auth.$waitForAuth();
    },

    user: {}

 };

return Auth;

});

我不知道我是否正确使用$ waitForAuth或$ requireAuth。我想要做的只是视图/缺陷/:defectid和/ defectlist,我想确保在加载视图之前对用户进行了身份验证。所以我使用了使用$ requireAuth的函数。但是,无论我是否登录,我都可以在地址栏中输入/ defectlist并查看我确定不正确的视图加载。另外,如何检查用户是否已登录?我想根据用户是否登录进行ng-hide或ng-show,并认为我可以使用$ getAuth?我不确定。任何帮助或建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

显示/隐藏元素并根据登录状态重新路由用户 - 使用文档中的代码填充存储在服务中的用户对象。您可以在路由配置中使用resolve方法检查用户对象是否为null,或者在控制器中加载,检查用户对象是否为null - 如果为null,则重新路由。如果您不想重新路由但只想显示/隐藏元素,请使用ng-show =" user"或ng-hide ="用户"

// Create a callback which logs the current auth state
function authDataCallback(authData) {
  if (authData) {
  //store the authData object in your service
  } else {
   //clear the authData object in your service
   //re-route user to logged out page
    console.log("User is logged out");
  }
}
// Register the callback to be fired every time auth state changes
var ref = new Firebase("https://<your-firebase>.firebaseio.com");
ref.onAuth(authDataCallback);

答案 1 :(得分:0)

我相信他们希望您现在检查当前已登录的用户:

FirebaseUser mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();

请参阅this example

相关问题