Angular (ui-router) & Firebase アプリでアップロード ページを作成していますが、サインインしているユーザーのみがアップロード ページを利用できるようにしたいと考えています。アップロード URLexample.com/upload
にアクセスすると、 に送信されexample.com/posts
ます。
ユーザーがログアウトしているかどうかを確認し、ユーザーが実際にログアウトしているかどうかを確認するif ステートメントをupload.ctrl.jsコントローラーに記述して、これを達成しようとしました。ルート URL$location
へのパスを Angular のサービスに変更させました。/posts
私のアプリのように:
if(Auth.logout) {
$location.path('/posts');
// Added the following line for feedback in console
console.log('Auth.logout is true');
}
ただし、ユーザーがログインして に移動する/upload
と、upload.tpl.html/posts
テンプレートは問題なく読み込まれますが、URL はではなく に切り替わります/upload
。このアクションは、ユーザーがログアウトしている場合にのみ発生するはずですが、ユーザーがログインしている場合でも発生しています。
if ステートメントに追加した行に手がかりがありconsole.log('Auth.logout is true');
ます。/upload
理由はわかりませんが、ログイン中またはログアウト中にナビゲートしようとすると、2 回呼び出されます。それは常に正しいようです。そのため、 にアクセスしようとするとAuth.logout
URL は常に になります。/posts
/upload
ここでこの問題を示すプランカーを作成しました
http://plnkr.co/edit/jx7xuyqxs3dPfQqTms6C?p=preview
別のウィンドウで起動して、URL の変更 (この場合は変更なし) を確認できます。
サインインするには、次を使用できます。
- 電子メール: a@a.com
- パスワード: 1111
この問題を解決する方法についてのアイデアはありますか? 前もって感謝します。
ノート:
Plunkr の実行中にhttp://run.plnkr.co/ZzrkWWeRl32wZsQ2/#/posts/upload
を新しいブラウザ タブにコピー アンド ペーストするように手動で URL を変更するにはURL)新しいタブで実行したら、手動で URL をhttp://run.plnkr.co/ZzrkWWeRl32wZsQ2/#/uploadに変更して(ログイン中またはログアウト中に)、URL がどのように元に戻るかを確認できます。http://run.plnkr.co/ZzrkWWeRl32wZsQ2/#/postsへ
アップデート
if文の条件をそのように変更することでこれを解決できました
if(!Auth.user) {
$location.path('/posts');
}
存在し、true の場合Auth.user
、ユーザーは認証済みです。
ファイル
upload.ctrl.js
app.controller('UploadCtrl', function ($scope, $stateParams, $location, Auth) {
$scope.signedIn = Auth.signedIn;
$scope.logout = Auth.logout;
if(Auth.logout) {
$location.path('/posts');
console.log('Auth.logout is true');
}
});
auth.serv.js
app.factory('Auth', function ($firebaseSimpleLogin, FIREBASE_URL, $rootScope, $firebase) {
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseSimpleLogin(ref);
var Auth = {
login: function (user) {
return auth.$login('password', user);
},
logout: function () {
auth.$logout();
},
resolveUser: function() {
return auth.$getCurrentUser();
},
signedIn: function() {
return !!Auth.user.provider;
},
user: {}
};
$rootScope.$on('$firebaseSimpleLogin:login', function(e, user) {
angular.copy(user, Auth.user);
Auth.user.profile = $firebase(ref.child('profile').child(Auth.user.uid)).$asObject();
console.log(Auth.user);
});
$rootScope.$on('$firebaseSimpleLogin:logout', function() {
console.log('logged out');
if(Auth.user && Auth.user.profile) {
Auth.user.profile.$destroy();
}
angular.copy({}, Auth.user);
});
return Auth;
});