How to generate a random url safe string with Elixir

后端 未结 3 1968
野的像风
野的像风 2021-02-05 00:47

I need to be able to generate random url safe strings so I could use those in links (like in an activation link sent to a user\'s email), so how can I generate it? Is there a wa

3条回答
  •  离开以前
    2021-02-05 01:27

    What you can do instead is to generate a Base64-encoded string to be used as a confirmation token. This confirmation token will then be saved to your DB and passed as params to the activation link. Your activation url would look something like:

    activation_url(MyApp.Endpoint, :confirm, confirm_id: confirm_id)
    

    The above url helper assumes you have a MyApp.ActivationController and a confirm/2 action in that controller. To generate the confirm_id, you could do:

    def random_string(length) do
      :crypto.strong_rand_bytes(length) |> Base.url_encode64 |> binary_part(0, length)
    end
    
    # random_string(64)
    

    In your MyApp.ActivationController.confirm/2, you could have code lik:

    def confirm(conn, %{"confirm_id" => confirm_id}) do
      user = Repo.get_by(User, confirm_id: confirm_id)
      User.confirm(user)
      conn
      |> put_flash(:info, "Account confirmed!")
      |> redirect(to: "/")
    end
    

    Hope that helps!

提交回复
热议问题