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)
另外,我有一個插件(把下面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
如何創建一個新的令牌,存儲在會話中,並繼續到所需頁面,而不是被重新路由到登錄頁面?
這GitHub的問題包含地址的簡單解決方案這個問題 - https://github.com/ueberauth/guardian/issues/209 – Mitkins