Ich versuche, die Beratung durch @hassox in dem folgende GitHub Problem gegeben zu implementieren:Guardian - "Remember Me" mit Aktualisierungs-Token
https://github.com/ueberauth/guardian/issues/142
Nachdem der Benutzer anmeldet, ich bin ein Erzeugen Token und in einem Cookie gespeichert, die eine ttl hat:
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)
Außerdem habe ich einen Stecker (nach unten Guardian.Plug.LoadResource
setzen) in meiner :browser_auth
Pipeline:
pipeline :browser_auth do
plug Guardian.Plug.VerifySession
plug Guardian.Plug.LoadResource
plug Zoinks.Plug.RememberMe
end
Hier ist, was die Plug wie im Moment aussieht:
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
Wie kann ich ein neues Token erstellen, zu speichern, die in der Sitzung und weiter auf die gewünschte Seite, statt umgeleitet werden zu die Anmeldeseite?
Diese GitHub Ausgabe einer Probenlösung enthält, die Adressen Diese Frage - https://github.com/ueberauth/guardian/issues/209 – Mitkins