Wenn ein Benutzer ein Token sendet, das nicht abgelaufen ist, aber dieser bestimmte Benutzer nicht mehr vorhanden ist, kann der Benutzer Guardian
immer noch zum Controller gelangen.Guardian den Benutzer auf den Controller zu bekommen, auch wenn current_user ist null?
Ich habe hinzugefügt {:ok, nil}
in current_user.ex
und es einfach die Verbindung zu töten, die ich glaube nicht, ist der richtige Ansatz, da ich etwas zurück an den Benutzer wie ein Fehler zurückgeben muss. Ich bin mir nicht sicher, was soll ich dort benutzen?
Hier mein Router ist:
pipeline :authed_api do
plug :accepts, ["json"]
plug Guardian.Plug.VerifyHeader, realm: "Bearer"
plug Guardian.Plug.EnsureAuthenticated, handler: Web.GuardianErrorHandler
plug Guardian.Plug.LoadResource
plug Web.CurrentUser, handler: Web.GuardianErrorHandler
end
scope "/api/v1", Web do
pipe_through :authed_api
get "/logout", UserController, :logout
resources "/users", UserController
get "/*get", ErrorController, :handle_redirect
end
Hier ist meine current_user
defmodule Web.CurrentUser do
import Plug.Conn
import Guardian.Plug
import Web.GuardianSerializer
def init(opts), do: opts
def call(conn, _opts) do
current_token = Guardian.Plug.current_token(conn)
case Guardian.decode_and_verify(current_token) do
{:ok, claims} ->
case Web.GuardianSerializer.from_token(claims["sub"]) do
{:ok, nil} ->
conn = Plug.Conn.halt(conn) # <-this line, I was referring to
{:ok, user} ->
Plug.Conn.assign(conn, :current_user, user)
{:error, _reason} ->
conn
end
{:error, _reason} ->
conn
end
end
end
Vielen Dank im Voraus.