Rails中的密码不能为空(使用has_secure_password)

时间:2015-06-03 23:37:25

标签: ruby-on-rails ruby authentication

我对Rails是全新的,我知道StackOverflow上已存在很多关于此问题的问题,但我尝试了几乎所有的解决方案,但没有一个解决方案适合我。

我正在尝试使用 has_secure_password 在我的rails项目中实现身份验证,并且我按照rails文档中提到的所有步骤进行操作。 即使我在输入框中输入密码和确认密码值,我也会在提交创建用户表单后收到“密码不能为空”错误消息。

请告知我是否遗漏了任何内容。

我遵循的步骤是 - 1)在gem文件中添加以下行 - gem'bcrypt',要求:'bcrypt' 2)捆绑安装 3)我的模型代码 -

class User < ActiveRecord::Base
  validates :name, presence: true, uniqueness: true
  has_secure_password
end

4)我的观看代码 -

<div>
          <%= f.label :name %>:
          <%= f.text_field :name, size: 40 %>
        </div>
        <div>
          <%= f.label :password, 'Password' %>:
          <%= f.password_field :password, size: 40 %>
        </div>
        <div>
          <%= f.label :password_confirmation, 'Confirm' %>:
          <%= f.password_field :password_confirmation, size: 40 %>
        </div>
        <div>

5)我的控制器代码 -

def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to users_url,notice: "User #{@user.name} was successfully created." }
        format.json { render :show, status: :created, location: @user }
      else
        format.html { render :new }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

3 个答案:

答案 0 :(得分:5)

非常感谢大家帮助我。我能够解决这个问题。

我在控制器中添加了以下代码行

for(int i = 0; i <= n.length / 2; i++) // reverses the array
{
    b[i] = n[b.length - i - 1];
    b[b.length - i - 1] = n[i];
}

文档 - http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

这解决了我的问题。

答案 1 :(得分:0)

尝试按照此处的步骤操作: See Listing 7.17

抱歉,我们还没有检查过您的控制器和评论:)这应该可以解决问题

答案 2 :(得分:0)

您应该将与密码相关的字段添加到user_params

def user_params
  params.require( :user ).permit( :password, :password_confirmation, :etc1, :etc2 )
end