我知道这里有很多关于 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
错误。
继承人的代码:
应用程序.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('/');
});
}
}
服务.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
,因为当我未经身份验证时我可以刷新就好了。希望有人可以帮助我,谢谢...