1

次のGitHubの問題で@hassoxから提供されたアドバイスを実装しようとしています:

https://github.com/ueberauth/guardian/issues/142

ユーザーがログインした後、トークンを生成し、ttl を持つ Cookie に保存します。

claims = Guardian.Claims.app_claims
|> Guardian.Claims.ttl({30, :days})

{:ok, token, full_claims } = Guardian.encode_and_sign(user, :remember, claims)

thirty_days = 86400 * 30

conn = put_resp_cookie(conn, "remember_me", token, max_age: thirty_days )

さらに、パイプラインに Plug ( の下に配置するGuardian.Plug.LoadResource) があります。:browser_auth

pipeline :browser_auth do
  plug Guardian.Plug.VerifySession
  plug Guardian.Plug.LoadResource
  plug Zoinks.Plug.RememberMe
end

現時点でのプラグの外観は次のとおりです。

defmodule Zoinks.Plug.RememberMe do
  import Plug.Conn
  import Guardian.Plug

  def init(opts \\ %{}), do: Enum.into(opts, %{})

  def call(conn, opts) do
    current_user = current_resource(conn)

    if ( current_user == nil ) do
      jwt = conn.req_cookies["remember_me"]

      case Guardian.decode_and_verify(jwt) do
        { :ok, claims } ->
          if ( claims |> Map.get("typ") == "remember" ) do
            {:ok, remember_user } = load_resource( conn, claims, opts )

            # This doesn't seem to do what I want
            conn |> Guardian.Plug.sign_in( remember_user )
          end

        { :error, reason } ->
          # Do something
      end
    end
  end
end

新しいトークンを作成し、それをセッションに保存して、サインイン ページに再ルーティングされるのではなく、目的のページに進むにはどうすればよいですか?

4

1 に答える 1