【问题标题】:Something wrong with my Comeonin.bcrypt code for password hashing我的 Comeonin.bcrypt 密码散列代码有问题
【发布时间】:2019-07-04 09:48:14
【问题描述】:

所以我正在使用Phoenix 最新版本和 Comeonin 5.0 和 bcrypt_elixir 2.0 来对我的密码进行哈希处理,但不知何故,它无法使用我正在使用的当前函数,并且显示它未定义。

因为在我使用hashpwsalt(pass) 传递我的密码以创建哈希之前,函数现在已更改。但现在我使用hash_pwd_salt(pass)。但它仍然向我显示错误。

defp put_password_hash(changeset) do
    case changeset do
      %Ecto.Changeset{valid?: true, changes: %{password: pass}}
        ->
          put_change(changeset, :password_hash, hash_pwd_salt(pass))
      _ ->
          changeset
    end
  end
end

这是我尝试运行服务器时遇到的错误:

无法导入 Comeonin.Bcrypt.hash_pwd_salt/1,因为它未定义或私有

请查看我的代码并告诉我可以做哪些更改?

【问题讨论】:

  • this tutorial,好像可以在模块开头加上alias Argon2,然后调用函数为Argon2.hash_pwd_salt(pass)。这听起来像你想要做的吗?
  • 顺便说一句,通过错误消息,听起来您有一行说import Comeonin.Bcrypt, only: [hash_pwd_salt: 1],但这不起作用,因为Comeonin.Bcrypt 没有该名称的函数,只有hashpwsalt (见the documentation)。
  • import Comeonin.Bcrypt, only: [hash_pwd_salt: 1] 更改为import Bcrypt, only: [hash_pwd_salt: 1]
  • @legoscia 我做了所有这些更改,但它不起作用。我检查了文档
  • @SiddhantSingh 能否请您提供重现问题所需的所有代码,否则人们将很难进一步帮助您。

标签: elixir importerror password-hash


【解决方案1】:

问题是没有单参数函数hash_pwd_salt/1。有一个hash_pwd_salt/2,第二个参数是可选的。

这里是the source Bcrypt 的 v2.0 中的那个函数:

  def hash_pwd_salt(password, opts \\ []) do
    Base.hash_password(
      password,
      gen_salt(
        Keyword.get(opts, :log_rounds, Application.get_env(:bcrypt_elixir, :log_rounds, 12)),
        Keyword.get(opts, :legacy, false)
      )
    )
end

请注意,如果您为模块取别名,则不需要函数的数量。

例如,将alias Comeonin.Bcrypt放在文件顶部附近,然后在调用函数时指定模块,如下所示:Bcrypt.hash_pwd_salt(pass)

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2016-06-13
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多