2016年10月19日水曜日

「Phoenix」フレームワークでユーザー認証ログイン

Phoenix」フレームワークでユーザー認証ログインです。モデルのloginメソッドで、ログイン判定しているらしい。真似して覚えていくしかないでしょう。

/web/controllers/session_controller.ex(コントローラー)
defmodule HelloPhoenix.SessionController do
  use HelloPhoenix.Web, :controller

  def new(conn, _params) do
    render(conn, "new.html")
  end

  def create(conn, %{"session" => session_params}) do
    case HelloPhoenix.Session.login(session_params, HelloPhoenix.Repo) do
      {:ok, user} ->
        conn
        |> put_session(:current_user, user.id)
        |> put_flash(:info, "ログインしました。")
        |> redirect(to: "/")
      :error ->
        conn
        |> put_flash(:error, "ログインに失敗しました。")
        |> render("new.html")
    end
  end
end
/web/models/session.ex(モデル)
defmodule HelloPhoenix.Session do
  alias HelloPhoenix.User

  def login(params, repo) do
    user = repo.get_by(User, email: String.downcase(params["email"]))
    case authenticate(user, params["password"]) do
      true -> {:ok, user}
      _    -> :error
    end
  end

  defp authenticate(user, password) do
    case user do
      nil -> false
      _   -> Comeonin.Bcrypt.checkpw(password, user.crypted_password)
    end
  end
end

参考サイト
User Authentication from Scratch in Elixir and Phoenix(Nithin Bekalさん)

0 件のコメント:

コメントを投稿