【发布时间】:2019-02-23 05:48:11
【问题描述】:
我在 Rails API 中创建了一个我认为是简单的用户身份验证的东西。我已经搜索了我可以在这里找到的所有答案,但我根本无法弄清楚我做错了什么。无论如何,当我尝试创建新用户时,我收到错误“密码不能为空”。
这是我的控制器代码:
class UsersController < ApplicationController
def create
user = User.new(user_params)
if user.save
render json: {user: user}, status: 201
else
render json: {errors: user.errors.full_messages}
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
end
我的模型,带有验证:
class User < ApplicationRecord
validates :name, presence: true, length: {maximum: 50}
validates :email, presence: true, length: {maximum: 255}, uniqueness: true
has_secure_password
validates :password, presence: {on: :create}, confirmation: {case_sensitive: true}, length: {minimum: 8}
validates :password_confirmation, presence: true
end
一个不断被拒绝的测试 JSON 对象:
{
"name": "Jim Nobody",
"email": "jim@anywhere.com",
"password": "abc12345",
"password_confirmation": "abc12345"
}
我不断收到的错误:
{
"errors": [
"Password can't be blank",
"Password can't be blank",
"Password is too short (minimum is 8 characters)",
"Password confirmation can't be blank"
]
}
我知道这个问题还有其他答案,但我已经逐行梳理了它们,我看不出我做错了什么。据我所知,所有字段都是允许的并且拼写正确。
非常感谢任何帮助。谢谢!
【问题讨论】:
-
如果您正在手动测试,您是否也可以发布正在发送的
params,或者如果您正在正确测试,您可以发布测试代码本身吗? -
当我在 Rails 控制台中测试时,我能够通过验证,但是当我在 Postman 中输入这个 json 对象时,我得到了错误。这让我觉得我的问题一定出在控制器文件中,而不是模型文件中。 Json 参数:
-
{"name":"Jim Nobody", "email":"jim@nowhere.com", "password":"12345678", "password_confirmation":"12345678"} -
您可以查看 rails 服务器日志并发布示例请求吗?这通常包括发送到服务器的参数。
-
您有
password_digest属性吗?has_secure_password可能会失败:record.errors.add(:password, :blank) unless record.password_digest.present?
标签: ruby-on-rails validation authentication activerecord bcrypt