【问题标题】:Devise new users not saved设计未保存的新用户
【发布时间】:2017-04-26 22:21:17
【问题描述】:

我正在构建一个仅允许管理员帐户创建新用户帐户的应用程序。我使用 devise 4.2 进行身份验证,使用 cancancan 进行 rails 4.2.6 的授权。我的问题是没有创建新用户,并且我没有收到任何错误消息,所以不知道出了什么问题。 我的注册控制器:

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  before_action :configure_account_update_params, only: [:update]
  #before_action :authorize_admin, only: [:create, :new, :destroy]
  before_action :authenticate_user!
  load_and_authorize_resource

  # GET /resource/sign_up
  def new
    super
  end

  # POST /resource
  def create
    build_resource(sign_up_params)

    resource.save
    yield resource if block_given?
    if resource.persisted?
      if resource.active_for_authentication?
        set_flash_message! :notice, :signed_up
        #sign_up(resource_name, resource)
         respond_with resource, location: after_sign_up_path_for(resource)
       else
         set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
         expire_data_after_sign_in!
         respond_with resource, location: after_inactive_sign_up_path_for(resource)
       end
     else
       clean_up_passwords resource
       set_minimum_password_length
       respond_with resource
    end
   end

  # GET /resource/edit
  def edit
     super
  end

  # PUT /resource
  def update
     super
  end

  # DELETE /resource
  def destroy
    super
  end

  def cancel
    super
  end

  protected

  def configure_sign_up_params
     devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end

  def configure_account_update_params
    devise_parameter_sanitizer.permit(:account_update, keys: [:name])
  end

  def after_sign_up_path_for(resource)
    super(resource)
  end

  def after_inactive_sign_up_path_for(resource)
    super(resource)
  end
end

我的看法:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div class="field">
     <%= f.label :name %>
     <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email%>
  </div>

  <div class="field">
     <%= f.label :password %>
     <% if @minimum_password_length %>
     <em>(<%= @minimum_password_length %> characters minimum)</em>
     <% end %><br />
     <%= f.password_field :password, autocomplete: "off" %>
  </div>

   <div class="field">
     <%= f.label :password_confirmation %><br />
     <%= f.password_field :password_confirmation, autocomplete: "off" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>

我在创建帐户时注释掉了登录新用户的行,因为我在以管理员身份登录时创建新用户时收到提示“您已经登录”的消息,这让我相信这就是原因没有保存新用户。这似乎是不正确的,尽管当我尝试创建一个新用户时,我仍然收到说同样事情的闪存消息。任何帮助表示赞赏。

【问题讨论】:

    标签: ruby-on-rails devise registration


    【解决方案1】:

    听起来您的目标是允许管理员用户创建用户。在这种情况下,您需要实际创建用户,而不是注册。这意味着,在您的控制器方法之一(可能在UsersController)中,您将拥有类似的内容:

    def create
      @user = User.create params
    end
    

    当您在Users::RegistrationsController 中创建新的注册时,这意味着您正在尝试注册为新用户,但由于您已经登录,因此设计会阻止它。

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多