使用 Canary 将默认当前用户覆盖为 Guardian 当前用户
Override default current user to Guardian current user with Canary
我正在尝试在我的应用程序中实施 Canary,但我遇到了一个问题。文档 (https://github.com/cpjk/canary#overriding-the-default-user) 说我需要为 conn.assigns.current_user
中的当前用户创建一个 Ecto 记录。由于我使用的是 Guardian,因此我的当前用户存储在 Guardian.Plug.current_resource(conn)
中。让金丝雀知道这是我存储当前用户的最佳方式是什么?
我无法使用 config :canary, current_user: :my_user_key
,因为它甚至不在 conn.assigns
中。
感谢帮助!
在 this article 之后,您应该为此创建一个插件:
defmodule MyApp.Plug.CurrentUser do
def init(opts), do: opts
def call(conn, _opts) do
current_user = Guardian.Plug.current_resource(conn)
Plug.Conn.assign(conn, :current_user, current_user)
end
end
并将其放入路由器管道中:
pipeline :require_login do
plug Guardian.Plug.EnsureAuthenticated, handler: MyApp.GuardianErrorHandler
plug MyApp.Plug.CurrentUser
end
我正在尝试在我的应用程序中实施 Canary,但我遇到了一个问题。文档 (https://github.com/cpjk/canary#overriding-the-default-user) 说我需要为 conn.assigns.current_user
中的当前用户创建一个 Ecto 记录。由于我使用的是 Guardian,因此我的当前用户存储在 Guardian.Plug.current_resource(conn)
中。让金丝雀知道这是我存储当前用户的最佳方式是什么?
我无法使用 config :canary, current_user: :my_user_key
,因为它甚至不在 conn.assigns
中。
感谢帮助!
在 this article 之后,您应该为此创建一个插件:
defmodule MyApp.Plug.CurrentUser do
def init(opts), do: opts
def call(conn, _opts) do
current_user = Guardian.Plug.current_resource(conn)
Plug.Conn.assign(conn, :current_user, current_user)
end
end
并将其放入路由器管道中:
pipeline :require_login do
plug Guardian.Plug.EnsureAuthenticated, handler: MyApp.GuardianErrorHandler
plug MyApp.Plug.CurrentUser
end