2015-10-22 8 views
7

prende questo esempio di codice come un plug per gestire l'autenticazione:current_user controller Phoenix approvata dal Plug

defmodule Financeweb.APIAuth do 
... 

    def call(conn, _opts) do 
    ... 

    if authenticated_user do 
     conn 
     |> assign(:current_user, user) 
    else 
     conn 
     |> send_resp(401, "{\"error\":\"unauthorized\"}") 
     |> halt 
    end 
    end 
end 

Quindi, sto passando la variabile current_user valle tramite Plug.Conn.assign/3. Qual è il modo migliore per ottenere questa variabile in un controller Phoenix? Sto facendo in questo modo (codice sotto), ma sono sicuro che c'è un modo migliore per farlo.

def index(conn, _) do 
    user_id = conn.assigns.current_user.id 
end 

risposta

9

sostituzione action/2 e iniettarla:

def action(conn, _) do 
    apply(__MODULE__, action_name(conn), 
    [conn, conn.params, conn.assigns.current_user]) 
end 

def index(conn, _params, current_user) do 
    ... 
end 

def show(conn, _params, current_user) do 
    ... 
end 
Problemi correlati