gpt4 book ai didi

ruby-on-rails - 密码参数未包含在强参数中

转载 作者:行者123 更新时间:2023-12-03 23:37:05 24 4
gpt4 key购买 nike

我在我的 User 类中使用带有 has_secure_password 的 Bcrypt,并尝试使用用户名和密码创建一个新用户,但密码参数虽然在我的强参数中允许,但没有通过。

这是我的用户类:

class User < ApplicationRecord
has_secure_password

has_many :journals
end

这是用户 Controller :
class Api::V1::UsersController < ActionController::API
def index
@users = User.all
render json: @users.to_json(:include => :journals)
end

def create
byebug
@user = User.create(user_params)
end

private

def user_params
params.require(:user).permit(:username, :password)
end
end

我正在尝试发布一个新用户:
fetch('http://localhost:3001/api/v1/users', {
method: 'POST',
headers: {Accept: 'application/json', "Content-Type":
'application/json'},
body: JSON.stringify({username: 'Name', password: 'test'})})

结果,在'create'中的byebug中,是:
(byebug) params
<ActionController::Parameters {"username"=>"Name", "password"=>"test",
"controller"=>"api/v1/users", "action"=>"create", "user"=> .
{"username"=>"Name"}} permitted: false>
(byebug) user_params
<ActionController::Parameters {"username"=>"Name"} permitted: true>

无论我尝试什么,我都无法访问 user_params 中的密码参数来创建具有散列密码的用户。

在终端中,在 rails 控制台中,我可以创建一个用户并按预期对密码进行哈希处理,然后我可以使用正常的获取请求从 API 中获取该用户信息,但是我不能使用强参数来创建一个带有 Post 请求的用户,我不知道为什么。

最佳答案

but I cannot use strong params to create a User with a Post request, and I don't know why.


主要是因为您没有正确使用强参数。
params.require(:user).permit(:username, :password)
这意味着您需要通过 {user: {username: 'foo', password: 'bar'}}而不是 {username: 'foo', password: 'bar'} (看到嵌套?)。
但即使你没有通过 params[:user][:username] ,它以某种方式神奇地存在。如何? ParamsWrapper , 这就是如何。

If you enable ParamsWrapper for :json format, instead of having to send JSON parameters like this:

{"user": {"name": "Konata"}}

You can send parameters like this:

{"name": "Konata"}

是的,但为什么 password没有得到同样的待遇?我们在下面找到几行:

On Active Record models with no :include or :exclude option set, it will only wrap the parameters returned by the class method attribute_names.

password不是模型中的属性/列,因此 params 包装器会忽略它。

关于ruby-on-rails - 密码参数未包含在强参数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com