繁体   English   中英

AngularJS + Rails + Devise-注销问题

[英]AngularJS + Rails + Devise - Logout issue

我正在使用Rails作为API和Devise gem进行身份验证来制作AngularJS应用。

当前在我的Rails Home Controller中,我正在执行以下操作:

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

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

我可以做的很好

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,然后加载页面。 有什么办法可以模仿我的角度吗?

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

您可以使用$window.location.href = '/users/sign_in'强制浏览器刷新

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM