我正在尝试使用bcrypt安全地存储用户的密码,而我正在使用has_secure_password
方法来执行此操作。不幸的是,当我这样做时,它不断抛出一个验证错误,说我没有提供密码。
参数是通过JSON发送的(这是一个API应用程序),我正在我的控制器中创建用户,如下所示:
class UsersController < ApplicationController
def create
@user = User.create(user_params)
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation) if params[:user]
end
end
我的用户模型如下:
class User < ActiveRecord::Base
require 'securerandom'
# Email and password must exist at all times
validates :email, presence: true
# Email must be unique and a valid email address
validates :email, uniqueness: true
validates :email, email_format: { message: "Email address doesn't look like an email address" }
# Password must be a minimum of 6 characters
# validates :password, length: { minimum: 6 }
# Password reset code and auth token must be unique
validates :password_reset_code, :auth_token, uniqueness: true, allow_nil: true
# Use secure password hashing with bcrypt
has_secure_password
# Create a new auth token after creation, this is so they can log in automatically
before_create :generate_auth_token
def generate_auth_token
self.auth_token = SecureRandom.hex(32)
end
end
现在,我正在向控制器操作create
发送一个API请求,其中包含以下有效内容:
{"email": "someguy@gmail.com", "password": "testing", "password_confirmation": "testing"}
但总是回来的验证错误是密码不能为空。我知道这与has_secure_password
有关,因为我之前没有它就有这个工作。另外,如果我将控制器方法更改为:
def create
@user = User.create(email: "someguy@gmail.com", password: "testing", password_confirmation: "testing")
end
它完美无缺,我在数据库中使用安全密码创建了一个用户。
为什么我的password
参数似乎迷失了?
答案 0 :(得分:2)
您的控制器正在寻找params散列中的用户密钥,它看起来不像您正在发送一个
尝试将创建有效负载设置为
{ "user": { "email":"someguy@gmail.com",
"password": "testing",
"password_confirmation": "testing" }
}