ルート:
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 を正しく使用しているかどうかわかりません。私がやりたいのは、ビュー /defects/:defectid と /defectlist だけです。ビューをロードする前に、ユーザーが認証されていることを確認したいのです。そこで、$requireAuth を使用する関数を使用しました。ただし、サインインしているかどうかに関係なく、アドレスバーに /defectlist と入力すると、正しくないと確信しているビューが読み込まれます。また、ユーザーがサインインしているかどうかを確認するにはどうすればよいですか? ユーザーがサインインしているかどうかに基づいて ng-hide または ng-show したいのですが、$getAuth を使用できると思いましたか? 私はわかりません。どんな助けやアドバイスも大歓迎です!