AngularJS (私は初心者です) では、ルーティング中に拒否された約束をどのように「解決」できますか?
私のアプリでは、すべての訪問者が匿名で、または資格情報を指定して認証される必要があります。私は Firebase と AngularFire を使用しています。
最初に、訪問者が に移動すると、を使用してルーティング中にroute
で認証されているかどうかを確認します。resolve
$routeProvider
訪問者が認証されない場合 ( error === 'AUTH_REQUIRED'
)、promise は拒否されます。次に、ユーザーを匿名で認証します。
promise が拒否されたため、ルートは読み込まcontroller
れview
ませんでした。
Q:訪問者を匿名で認証した後、どのようにルートのcontroller
とを読み込むことができますか?view
どういうわけかルートをリフレッシュ/リロードできると思いますが、もっと良い方法があると思います。
したがって、認証が必要なルートに移動する認証されていないユーザーの場合 (ほとんどすべてのユーザーがそうします):
- 認証が必要です。約束を拒否する
- 訪問者を匿名で認証する
- 匿名認証が成功しました。訪問者がすでに認証されていた場合と同様に、ルートの
controller
and (およびその他すべて) をロードします。view
私が理解しているように、すでに拒否された約束を解決することはできません。
お役に立てれば幸いです。これを達成するために私が現在行っていることの例を次に示します。
var app = angular.module('vo2App', ['firebase', 'ngRoute']);
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/', {
controller: 'HomeCtrl',
resolve: {
'currentAuth': ['Auth', function (Auth) {
return Auth.$requireAuth();
}]
},
templateUrl: './views/home.html'
})
}]);
app.run(['$rootScope', 'Auth', function ($rootScope, Auth) {
$rootScope.$on('$routeChangeError', function (event, next, prev, error) {
if (error === 'AUTH_REQUIRED') {
console.log('Unauthorized');
Auth.$authAnonymously().then(function (authData) {
console.log(authData);
}).catch(function(error) {
console.log(error);
});
}
});
}]);
app.controller('HomeCtrl', ['currentAuth', function (currentAuth) {
console.log(currentAuth);
}]);
app.factory('Auth', ['$firebaseAuth', function ($firebaseAuth) {
var ref = new Firebase('https://myvo2-mx.firebaseio.com');
return $firebaseAuth(ref);
}]);