AngularJS + Rails + Devise - 注销问题

时间:2014-02-02 01:05:32

标签: ruby-on-rails angularjs devise

我正在制作一个AngularJS应用程序,使用Rails作为API和Devise gem进行身份验证。

目前在我的rails家庭控制器中我正在做:

def index
  if user_signed_in?
    set_csrf_cookie_for_angular
    render Rails.root.join('public', 'angular_app').to_s, layout: false
  else
    redirect_to new_user_session_path
  end
end

基本上,如果用户已登录,请转到“angular_app”(实际上是重命名的index.html文件),否则请转到设计表单中的设计。

这很有效,因为我可以做到

before_filter :authenticate_user!

对于需要登录的所有页面,我可以从Angular拦截器处理401.

现在我遇到的问题是将用户重定向到Angular的登录页面

.config(function ($httpProvider){
        $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('/users/sign_in');
                };
            };

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

location.path将URL更改为正确的路径 - 但在手动刷新页面之前不会显示表单。在刷新时通过控制台查看它会执行GET然后加载页面。有没有办法可以模仿角度?

如果有人有更好的处理方式,请告诉我!

1 个答案:

答案 0 :(得分:1)

您可以使用$window.location.href = '/users/sign_in'

强制浏览器刷新