0

当用户想要执行需要他先登录的操作时,devise 会将他重定向到登录页面并设置一个闪烁消息:“请先登录或注册,然后再继续”。这适用于无 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 错误时手动打开登录页面。问题是没有以这种方式设置闪存消息。那么有人可以知道如何像往常一样设置闪存消息以保持一致的行为吗?

4

1 回答 1

1

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

因此,在您的设计配置中:

config.http_authenticatable_on_xhr = false

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

于 2013-05-11T12:15:48.180 回答