3

フロントエンドが Vue.js で管理され、バックエンドが API の elixir/phoenix フレームワークで管理されるプロジェクトを行っています。csrf-token と JWT を使用してユーザーの認証を管理する必要があります。jwt 部分 ( https://hexdocs.pm/guardian/readme.html ) にガーディアン ライブラリを使用しており、現在 csrf_token 部分でブロックしています。

vue.js からログイン フォームを送信するときに jwt に入力し、ユーザーが接続されたときに返される csrf-token を生成したいと考えています。ドキュメントを読みましたが、html ページが phoenix によって生成されていない場合に csrf-token を実装する方法がわかりません。( https://hexdocs.pm/plug/Plug.CSRFProtection.html )

では、vue.js html ページで phoenix を使用して csrf-token の生成を管理するにはどうすればよいでしょうか?

接続に使用するルートは次のとおりです。

scope "/api", AuthTutorialPhoenixWeb do
    pipe_through(:api)

    post("/users/sign_in", SessionController, :new)
  end

そして、これは私のコントローラです:

defmodule AuthTutorialPhoenixWeb.SessionController do
  use AuthTutorialPhoenixWeb, :controller

  alias AuthTutorialPhoenix.Accounts
  alias AuthTutorialPhoenix.Authentication.Guardian

  action_fallback(AuthTutorialPhoenixWeb.FallbackController)

  # new session
  def new(conn, %{"email" => email, "password" => password}) do
    case Accounts.authenticate_user(email, password) do
      {:ok, user} ->
        # Lifetime Token of 15 minutes
        {:ok, access_token, _claims} =
          Guardian.encode_and_sign(user, %{}, token_type: "access", ttl: {15, :minute})

        {:ok, refresh_token, _claims} =
          Guardian.encode_and_sign(user, %{}, token_type: "refresh", ttl: {7, :day})

        conn
        |> put_resp_cookie("ruid", refresh_token)
        |> put_status(:created)
        |> render("token.json", access_token: access_token, user: user)

      {:error, :unauthorized} ->
        body = Jason.encode!(%{error: "unauthorized"})

        conn
        |> send_resp(401, body)
    end
  end
end
4

0 に答える 0