Rails仅设置电子邮件注册 - 使用密码和名称进行确认

时间:2014-02-24 14:13:45

标签: ruby-on-rails devise confirmation

我设置Devise以允许email only注册过程,该过程通过设置密码发送带有确认帐户链接的电子邮件。 我想在密码设置(和帐户确认)的同时设置firstnamelastname,但我不知道该怎么做。

这是我的确认控制器(工作),Crafter是我的标准用户。 我试了Crafter.update_attributes(params[:crafter])没有运气。 任何帮助都会很精彩。 TY。

  def update
    with_unconfirmed_confirmable do
      if @confirmable.has_no_password?
        @confirmable.attempt_set_password(params[:crafter])
        if @confirmable.valid?
                    @confirmable.update_attributes(params[:crafter])
          do_confirm
        else
          do_show
          @confirmable.errors.clear #so that we wont render :new
        end
      else
        self.class.add_error_on(self, :email, :password_allready_set)
      end
    end

    if !@confirmable.errors.empty?
      render 'devise/confirmations/new' #Change this if you don't have the views on default path
    end
  end

  def do_show
    @confirmation_token = params[:confirmation_token]
    @requires_password = true
    self.resource = @confirmable
    render 'devise/confirmations/show' #Change this if you don't have the views on default path
  end

  def do_confirm
    @confirmable.confirm!
    set_flash_message :notice, :confirmed
    sign_in_and_redirect(resource_name, @confirmable)
  end

我的“确认帐户”表格:

<%= form_for resource, :as => resource_name, :url => update_user_confirmation_path, :html => {:method => 'patch', class: "form-horizontal", role: "form"}, :id => 'activation-form' do |f| %>

<%= f.text_field :firstname, autofocus: true, placeholder: "Firstname", class: "form-control" %>
<%= f.text_field :lastname, placeholder: "Lastname", class: "form-control" %>
<% if @requires_password %>
<%= f.password_field :password, autofocus: true, placeholder: "Choose A Password", class: "form-control" %>
<%= f.password_field :password_confirmation, placeholder: "Confirm Password", class: "form-control" %>  
<% end %>
<%= hidden_field_tag :confirmation_token,@confirmation_token %>

1 个答案:

答案 0 :(得分:0)

很难说,但我猜你没有把firstnamelastname参数传递给控制器​​。

Rails 4使用名为strong parameters的东西;如果你想超越下面的例子,README那里有很多好的信息。

在ApplicationController中,您需要允许其他参数,添加以下行:

应用程序/控制器/ application_controller.rb

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:account_update) do |u|
      u.permit(:firstname, :lastname, :email, :current_password, :password, :password_confirmation)
    end
  end

那应该解决问题 在CrafterController中你可以这样做:

@confirmable.update_with_password(account_update_params)

只是做得更清洁