Phoenix框架使用控制器生成随机字符串

Jos*_*eph 1 elixir phoenix-framework

我想生成一个令牌并将其插入我的mysql数据库,这是当前的代码,我只是传递'123'.mix phoenix.gen.secret可以生成随机字符串如何将它用于我的控制器?

def create(conn, %{"token" => token_params}) do
token_params = Map.merge(token_params, %{"value" => "123"})

changeset = Token.changeset(%Token{}, token_params)

case Repo.insert(changeset) do
  {:ok, token} ->
    conn
    |> put_status(:created)
    |> put_resp_header("location", token_path(conn, :show, token))
    |> render("show.json", token: token)
  {:error, changeset} ->
    conn
    |> put_status(:unprocessable_entity)
    |> render(MyApp.ChangesetView, "error.json", changeset: changeset)
  end
Run Code Online (Sandbox Code Playgroud)

结束

Dog*_*ert 8

您可以使用:crypto.strong_rand_bytes/1,mix phoenix.gen.secret 内部使用:

iex(1)> length = 32
32
iex(3)> :crypto.strong_rand_bytes(length) |> Base.encode64 |> binary_part(0, length)
"YiX2oINVqVWCCQZdmESBN44OxcErAFR4"
iex(4)> :crypto.strong_rand_bytes(length) |> Base.encode64 |> binary_part(0, length)
"ka2PSR9cHYSlD6fhdMpnGHgTVA7AoDwN"
Run Code Online (Sandbox Code Playgroud)