Phoenix控制器中的current_user通过Plug传递

Nan*_*usa 10 elixir phoenix-framework

将此代码示例作为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
Run Code Online (Sandbox Code Playgroud)

所以,我通过current_user下游传递变量Plug.Conn.assign/3.在Phoenix控制器中获取此变量的最佳方法是什么?我这样做(下面的代码),但我确信有更好的方法来做到这一点.

def index(conn, _) do
  user_id = conn.assigns.current_user.id 
end
Run Code Online (Sandbox Code Playgroud)

Chr*_*ord 12

覆盖action/2并注入它:

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
Run Code Online (Sandbox Code Playgroud)