current_user
我在 Phoenix 项目中的 session_controller.ex 分配user_token
给 Conn 如下。
def create(%Plug.Conn{private: %{openmaize_user: %{id: id}}} = conn, _params) do
username = conn.private.openmaize_user.username
IO.inspect("SessionController create: username")
conn = conn
|> put_current_user(username)
|> put_session(:user_id, id)
|> auth_info("You have been logged in", user_path(conn, :index))
end
defp put_current_user(conn, username) do
token = Phoenix.Token.sign(conn, "user socket", conn.private.openmaize_user.username)
conn = conn
|> assign(:current_user, username)
|> assign(:user_token, token)
end
然后我尝试current_user
通过 Plug.Conn 在另一个模块中使用如下,但 Conn.assigns 那时为空。(“current_user”字段只是一个示例,它可以是任何字段)。
问题是如何将值分配给 Conn 以及如何在其他模块中使用这些值。
defmodule MyApp.GraphQLSession do
import Plug.Conn
alias MyApp.{Repo, User}
use MyApp.Web, :controller
def root_eval(conn) do
%{current_user: conn.assigns[:current_user]}
SessionController 中的 Conn(成功赋值)
%Plug.Conn{adapter: {Plug.Adapters.Cowboy.Conn, :...},
assigns: %{current_user: "User A",
user_token: "SFMyNTY.g3QAAAACZAAEZGF0YW0AAAAHLIL1VECezSDyQ"},
Conn 在 SessionController 之外的模块中
%Plug.Conn{adapter: {Plug.Adapters.Cowboy.Conn, :...}, **assigns: %{}**,..... nil