ここでangularjsのリダイレクトの問題について多くのことを知っていますが、これまでのところこの問題のようなものは見られませんでした.RailsをDeviseのAPIサーバーとして使用しています.ajax/jsonでDeviseにログインできますが、更新するとページを表示するためにログインする必要がある場所にログインすると、「リダイレクト ループ」エラーが発生します。このように:
アプリ0.0.0.0:3000/#/
に移動します。ログインする必要があるため、次のようにリダイレクトされます0.0.0.0:3000/#/login
:エラーが発生する更新を行います。0.0.0.0:3000/#/
0.0.0.0:3000/#/events/new
redirect loop
コードは次のとおりです。
app.js
angular.module("eventnote", ['eventServices', 'loginServices', 'pruebaS', 'countrySelect']).config(['$httpProvider', function(provider){
provider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
}]).config(['$httpProvider', function($httpProvider){//start to configure the interceptor
var interceptor = function($q, $location, $rootScope) {
return function(promise){
return promise.then(function(response){return response;}, function(response){
console.log(response.status);
if (response.status == 401){//just the 401 responses
$rootScope.$broadcast('event:unathorized');
$location.path('/login');
return response;
}
return $q.reject(response);
});
}
};
$httpProvider.responseInterceptors.push(interceptor);//add the interceptor
}]).config(["$routeProvider", function($routeProvider){
$routeProvider.when("/events/new", {templateUrl: 'ang/create.html', controller: NewEventsCtrl})
.when("/events/:id/edit", {templateUrl: 'ang/edit.html', controller: UpdateCtrl })
.when("/login", {templateUrl: "ang/login.html", controller: LoginCtrl})
.when("/", {templateUrl: 'ang/home.html', controller: HomeCtrl})
}]);
コントローラー.js:
function HomeCtrl ($scope, Prueba) {
$scope.state = "";
$scope.obj = Prueba.probar(function(re) { $scope.state = re.mensaje}, function(re){ $scope.state = re.data.error;});
$scope.error = $scope.obj.error;
}
function LoginCtrl($scope, $location, Login, Logout){
$scope.user = {};
$scope.login = function(user){
var u = new Login({user:{email: user.email, password: user.password}});
u.$log_in(function(result){
$location.path('/');
});
}
}
services.js:
angular.module('loginServices', ['ngResource'])
.factory('Login', function($resource){
return $resource('users/sign_in.json', {}, {
log_in: {method: 'POST'}
});
}).factory('Logout', function($resource){
return $resource('users/sign_out.json', {},{
log_out: {method: 'DELETE'}
});
});
angular.module('pruebaS', ['ngResource'])
.factory('Prueba', function($resource){
return $resource('api/prueba', {}, {
probar: {method: 'GET'}
});
});
この問題はログインしているときにのみ発生するため、interceptor
認証されていないときに問題なく更新できるため、 の可能性があると思います。誰かが私を助けてくれることを願っています、ありがとう。