我的Comeonin.bcrypt代码用于密码哈希处理时出错

时间:2019-07-04 09:48:14

标签: elixir importerror password-hash

因此,我正在使用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,因为它是未定义的或私有的

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

1 个答案:

答案 0 :(得分:0)

问题在于没有单个参数函数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)