2014-02-22 37 views
2

我在Rails API上運行Angular。爲了驗證我截取401個狀態用:設計JSON API返回200而不是401因爲重定向

.config(['$httpProvider', function($httpProvider){ 
    // Prevent rails from making new sessions each time 
    $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content'); 

    var interceptor = ['$location', '$rootScope', '$q', function($location, $rootScope, $q) { 
     function success(response) { 
     return response; 
     } 

     function error(response) { 
     if (response.status === 401) { 
      $rootScope.$broadcast('event:unauthorized'); 
      $location.path('/login'); 
      return response; 
     } 
     return $q.reject(response); 
     } 

     return function(promise) { 
     return promise.then(success, error); 
     }; 
    }]; 
    $httpProvider.responseInterceptors.push(interceptor); 
    }]) 

但因爲重定向的攔截而無法觸發顯示的200

Started GET "/api/v1/stages" for 127.0.0.1 at 2014-02-23 04:38:12 +0530 
Processing by StagesController#index as HTML 
Completed 401 Unauthorized in 5ms 


Started GET "/api/v1/users/sign_in" for 127.0.0.1 at 2014-02-23 04:38:12 +0530 
Processing by Devise::SessionsController#new as HTML 
    Rendered /home/kartikluke/.rvm/gems/ruby-2.0.0-p247/gems/devise-3.2.2/app/views/devise/shared/_links.erb (4.3ms) 
    Rendered /home/kartikluke/.rvm/gems/ruby-2.0.0-p247/gems/devise-3.2.2/app/views/devise/sessions/new.html.erb within layouts/application (34.5ms) 
Completed 200 OK in 223ms (Views: 171.2ms | ActiveRecord: 5.8ms) 

狀態如何使設計返回401 JSON錯誤?

回答

4

經過大量的搜索,我找到了一個解決方案。

我添加了一個自定義的應用程序的故障,制定:

class JsonFailureApp < Devise::FailureApp 
    def respond 
    self.status = 401 
    self.content_type = 'json' 
    self.response_body = '{"error" : "authentication error"}' 
    end 
end 

,並補充說,制定:

config.warden do |manager| 
    manager.failure_app = JsonFailureApp 
end 

現在重定向不叫和而不是401狀態被註冊。

相關問題