Sto seguendo lo Phoenix Guide on Plugs per creare il mio Module Plug
che carica l'utente corrente dalla sessione. Il @user
non viene assegnato quando si utilizza il modulo plug-in, ma funziona correttamente quando lo chiamo come funzione privata all'interno di router.ex
.Plug.Conn.assign non funziona quando viene chiamato da un Pipeline Plug
Questo è il mio web/router
:
defmodule MyApp.Router do
use MyApp.Web, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug MyApp.Plugs.User
end
# Scopes and Routes...
end
Questo è il mio modulo (in web/plugs/user.ex
):
defmodule MyApp.Plugs.User do
import Plug.Conn
def init(default), do: default
def call(conn, default) do
user = %{
id: get_session(conn, :user_id),
username: get_session(conn, :username)
}
assign(conn, :user, user)
IO.inspect conn
end
end
Ho provato a ispezionarlo per vedere se davvero era stato assegnato, ma non è stato :
%Plug.Conn{adapter: {Plug.Adapters.Cowboy.Conn, :...}, assigns: %{},
before_send: [#Function<1.75757453/1 in Plug.CSRFProtection.call/2>,
#Function<1.30521811/1 in Phoenix.Controller.fetch_flash/2>,
#Function<0.39713025/1 in Plug.Session.before_send/2>,
#Function<1.7608073/1 in Plug.Logger.call/2>,
#Function<0.72065156/1 in Phoenix.LiveReloader.before_send_inject_reloader/1>],
body_params: %{},
cookies: ....
Vedo ... Credo che dovrei prendere le basi per l'elisir giusto prima di passare a Phoenix. – Sheharyar
Si noti inoltre che 'IO.inspect' restituisce il valore che controlla, quindi' assign (conn,: user, user) |> IO.inspect' avrebbe anche funzionato –