gpt4 book ai didi

Elixir/Phoenix 限制参数,如 Rails 强参数

转载 作者:行者123 更新时间:2023-12-02 08:25:13 25 4
gpt4 key购买 nike

我正在制作一个仅限 API 的 Phoenix 应用程序。我有 Ruby on Rails 背景,所以请耐心等待。

假设我有一个用户模型 email , password , password_hash ,和role字段。

我需要限制 rolepassword_hash来自用户输入的字段,或将 email 列入白名单和password字段。现在任何人都可以以管理员身份发布此注册:

{
"user": {
"email": "test3@test.com",
"password": "testpw",
"password_hash": "shouldn't allow user input",
"role": "admin"
}
}

这通常在 Rails 中使用强参数来完成,这将删除未明确指定的字段。

如何使用最佳实践对 Phoenix 进行限制/白名单参数?

这是我在 user_controller 中的创建方法:

  def create(conn, %{"user" => user_params}) do
changeset = User.registration_changeset(%User{}, user_params)
...
...
end

这是我的架构和模型 user.ex 中的变更集。我正在关注this tutorial, it says "we pipe the new changeset through our original one"

  schema "users" do
field :email, :string
field :password, :string, virtual: true
field :password_hash, :string
field :role, :string

timestamps()
end

def changeset(model, params \\ :empty) do
model
|> cast(params, ~w(email), [])
|> downcase_email()
|> unique_constraint(:email)
|> validate_format(:email, ~r/@/)
end

def registration_changeset(model, params) do
model
|> changeset(params)
|> cast(params, ~w(password), [])
|> validate_length(:password, min: 6)
|> put_password_hash()
end

Phoenix 的scrub_params is close ,但这听起来不像我需要的。

我认为我可以通过模式匹配来完成此任务,但我不确定如何实现。

最佳答案

实际上,代码的行为符合预期,并且不保存角色字段。 (我在控制台中读取请求,而不是实际检查数据库。)

关于Elixir/Phoenix 限制参数,如 Rails 强参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39938824/

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