我的 Comeonin.bcrypt 密码散列代码有问题

Something wrong with my Comeonin.bcrypt code for password hashing

所以我正在使用 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

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

cannot import Comeonin.Bcrypt.hash_pwd_salt/1 because it is undefined or private

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

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

这是 Bcrypt 的 v2.0 中该函数的 the source

  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)