在凤凰城转换params

时间:2017-05-26 20:57:05

标签: elixir phoenix-framework

我在My Phoenix app控制器中执行了以下操作:

defmodule TattooBackend.Web.API.V1.TokenController do
  use TattooBackend.Web, :controller

  alias TattooBackend.Accounts.Account
  alias TattooBackend.Repo
  alias TattooBackend.Web.Endpoint
  alias Comeonin.Bcrypt
  alias Phoenix.Token

  action_fallback TattooBackend.Web.FallbackController

  def create(conn, params) do
    email = to_string(params["email"])
    password = to_string(params["password"])

    account = Repo.get_by(Account, email: String.downcase(email))

    case account && Bcrypt.checkpw(password, account.crypted_password) do
      true ->  render conn, token:  Token.sign(Endpoint, "user", account.id)
      _    ->  {:error, :wrong_credentials}
    end
  end
end

在这些方面:

email = to_string(params["email"])
password = to_string(params["password"])

在这些行上,如果它们是零,我将我的参数转换为空字符串。我这样做是因为当我将nil传递给String.downcase方法时,app会中断。问题是,处理这种情况有什么“凤凰方式”吗?

1 个答案:

答案 0 :(得分:2)

我使用||运算符,如果LHS为nilfalse,则返回RHS,或Map.get/3使用默认值:

email = params["email"] || ""
password = params["password"] || ""

email = Map.get(params, "email", "")
password = Map.get(params, "password", "")