在处理ajax请求时,设计不设置flash消息

时间:2013-05-11 08:38:52

标签: ruby-on-rails ruby-on-rails-3 devise

当用户想要执行需要他首先登录的操作时,设计会将他重定向到登录页面并设置一条闪烁消息:“请在继续之前登录或注册”。这适用于no-ajax请求。但是,如果ajax请求首先需要登录,它将响应401错误,我们应该手动处理它,如下所示:

$.ajax({                                            
url: '/books/user_score',                         
type: 'POST',                                     
data: { score: value, book_id: book_id },         
dataType: 'json',                                 
success: function(data) {                         
  bookStarWidget.data('starInfo', data.book_star);
  setVote(bookStarWidget);                        
  $("[name='my_vote']").rating('disable');        
},                                                
error: function(jqXHR, textStatus, errorThrown) { 
  if (jqXHR.status == 401) {                      
    window.location.assign('/users/sign_in');     
  }                                               
}                                                 
});                               

在上面的代码中,我们在收到401错误设备发送时手动打开登录页面。 问题是以这种方式设置没有闪存消息。那么有人可以像往常一样知道如何设置Flash消息以保持一致的行为吗?

1 个答案:

答案 0 :(得分:1)

看起来您正在使用javascript在错误案例中设置位置。 Devise有一个配置选项,它会在失败时重定向,而不是返回http标头。此设置默认为true,这会强制您手动处理xhr上的故障。以下是来源的解释:https://github.com/plataformatec/devise/blob/master/lib/devise/failure_app.rb#L120

所以,在你的Devise配置中:

config.http_authenticatable_on_xhr = false

再次尝试未经身份验证的ajax请求,Devise将为您执行重定向,这应该按照您的预期设置Flash消息。