我在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会中断。问题是,处理这种情况有什么“凤凰方式”吗?
答案 0 :(得分:2)
我使用||
运算符,如果LHS为nil
或false
,则返回RHS,或Map.get/3
使用默认值:
email = params["email"] || ""
password = params["password"] || ""
或
email = Map.get(params, "email", "")
password = Map.get(params, "password", "")