如何防止Devise使用AJAX发出302重定向

时间:2015-12-02 08:27:55

标签: ruby-on-rails ajax devise

我正在创建一个Angular应用程序,使用带有Devise的Rails后端通过AJAX注册和登录用户。一切都运行良好,用户被添加到数据库,但我得到302响应,触发AJAX错误回调。

我尝试将以下内容添加到registrations_controller.rb中,但没有运气:

class RegistrationsController < Devise::RegistrationsController
    respond_to :json

private

    def sign_up_params
        params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation, :username)
    end

    def account_update_params
        params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation, :current_password, :username)
    end

end

当然要确保在路线中使用此控制器:

Rails.application.routes.draw do
    devise_for :users, :controllers => { registrations: "registrations" }

    resources :messages
end

从Devise触发200或201响应的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

因此,默认情况下,Devise设置为使用其视图来处理注册/登录过程。话虽这么说,如果您使用AJAX发出请求,您将始终获得302重定向,因为Devise正在将您发送到下一个HTML视图。

要使用AJAX阻止这种情况发生,重要的是使用.json扩展名来设计Devise端点。例如,要创建用户:

POST /users.json

或者登录用户:

POST /users/sign_in.json

这是因为Devise在其逻辑中使用了respond_to,这需要这个扩展。

答案 1 :(得分:0)

强制设计触发401响应的另一种方法是在客户端的请求标头中添加Accept: application/json