0

我正在尝试使用设计身份验证创建应用程序,但我想使用 Inertia + VueJS 而不是 Rails 视图。我很难完成这项工作,到目前为止,我使用了自定义控制器rails generate devise:controllers users

注册控制器

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  layout false

  # POST /resource
  def create
    super
  end

  protected

  # If you have extra params to permit, append them to the sanitizer.
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

路线文件

Rails.application.routes.draw do
  devise_for :users, skip: :registrations
  devise_scope :user do
    post 'sign_up', to: 'users/registrations#create'
  end
  root 'home#index'
end

应用控制器

class ApplicationController < ActionController::Base
    before_action :authenticate_user!
    protect_from_forgery prepend: true
end

Ruby 版本:'2.6.5',Rails 版本:'6.0.3.2'

我正在使用 Insomnia 提出请求,我只传递了一个带有姓名、电子邮件、密码和密码确认的 json。这是我 失眠的反应

4

1 回答 1

0

这是因为您为用户注册创建了自定义路径,但devise在调用时仍使用默认控制器继承,super在某些内部函数中使用默认路由助手。

修复它的最简单方法 - 使用设计而不是创建自己的路线

删除那个

  devise_scope :user do
    post 'sign_up', to: 'users/registrations#create'
  end

并改变devise_for

devise_for :users, controllers: {
  registrations: 'users/registrations'
}
于 2020-07-14T12:07:52.267 回答