我正在创建一个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响应的最佳方法是什么?
答案 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
。