我正在制作一个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然后加载页面。有没有办法可以模仿角度?
如果有人有更好的处理方式,请告诉我!
答案 0 :(得分:1)
您可以使用$window.location.href = '/users/sign_in'