defmodule Plug.CcsAuth do import Plug.Conn def sign(conn, user_huid, phone, udid) do Phoenix.Token.sign(conn, "user", %{phone: phone, udid: udid, user_huid: user_huid}) end def init(opts), do: opts def call(conn, _opts) do case Phoenix.Token.verify(conn, "user", parse_bearer_token(conn)) do {:ok, %{phone: phone, udid: udid, user_huid: user_huid}} -> conn |> assign(:phone, phone) |> assign(:udid, udid) |> assign(:user_huid, user_huid) {:error, reason} -> conn |> halt() |> put_resp_content_type("application/json") |> send_resp(:unauthorized, Poison.encode!(%{error: :unauthorized})) end end defp parse_bearer_token(conn) do case get_req_header(conn, "authorization") do ["Bearer " <> token] -> token _ -> nil end end end