我的环境是 Rails 3.0.1 和 Devise 1.1。我正在开发一个移动 Web 应用程序,主要使用 javascript,并希望尽可能多地保持基于 JSON 的通信。
有没有办法让设计用 JSON 响应成功/失败消息,而不必遵循 302 重定向并解析 HTML?
看着用this .
...但不要让它工作。
最佳答案
您可以重新定义 sign_in_and_redirect 和 sign_out_and_redirect 设计助手,以呈现 json 而不是重定向用户。
我无法在初始化程序中重新定义它们,因此我找到的最接近的解决方案是将其添加到 application_controller.rb :
private
# Override the default devise signin/signout process
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
# redirect_to stored_location_for(scope) || after_sign_in_path_for(resource)
render :json => {:status => :signed_in}
end
def sign_out_and_redirect(resource_or_scope)
scope = Devise::Mapping.find_scope!(resource_or_scope)
if Devise.sign_out_all_scopes
sign_out_all_scopes
else
sign_out(scope)
end
#redirect_to after_sign_out_path_for(scope)
render :json => {:status => :signed_out}
end
如果有人有更清洁的解决方案,我也很感兴趣
关于ruby-on-rails - Rails 3 + 设计 - 如何让设计以 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522069/