路线:
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?我不确定。任何帮助或建议将不胜感激!
答案 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