Переслать аргументы от пользовательского плагина ко второму
У меня есть пользовательский плагин, который выглядит следующим образом:
defmodule Db.Auth.GuardianPipeline do
use Guardian.Plug.Pipeline,
otp_app: :db,
module: Db.Auth.Guardian
plug Guardian.Plug.VerifySession, claims: %{"typ" => "access"}
plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}
plug Guardian.Plug.LoadResource, allow_blank: true
plug Guardian.Plug.VerifySession, claims: %{"typ" => "access"}, key: :impersonated_user
plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}, key: :impersonated_user
plug Guardian.Plug.LoadResource, allow_blank: true, key: :impersonated_user
end
Тем не менее, я должен быть в состоянии передать обработчик ошибок. В настоящее время я делаю это так:
pipeline :authenticate do
plug(Guardian.Plug.Pipeline, error_handler: Web.Auth.ErrorHandler)
plug(Db.Auth.GuardianPipeline)
end
Я бы предпочел сделать что-то вроде этого:
pipeline :authenticate do
plug(Db.Auth.GuardianPipeline, error_handler: Web.Auth.ErrorHandler)
end
И имейте это, передавайте в мой штепсель как это, или эквивалент:
defmodule Db.Auth.GuardianPipeline do
use Guardian.Plug.Pipeline,
otp_app: :db,
module: Db.Auth.Guardian,
error_handler: args["error_handler"],
plug Guardian.Plug.VerifySession, claims: %{"typ" => "access"}
plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}
plug Guardian.Plug.LoadResource, allow_blank: true
plug Guardian.Plug.VerifySession, claims: %{"typ" => "access"}, key: :impersonated_user
plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}, key: :impersonated_user
plug Guardian.Plug.LoadResource, allow_blank: true, key: :impersonated_user
end
Как передать аргументы из моего пользовательского штекера в его внутренние штекеры?
1 ответ
Решение
Ниже выполню то, что мне нужно. С помощью builder_opts()
будет проходить через варианты от одного плагина к другому. Это использует Plug.Builder
, что, конечно, может быть использовано за пределами Guardian и для других штекеров.
defmodule Db.Auth.AuthPipeline do
use Guardian.Plug.Pipeline, otp_app: :db, module: Db.Auth.Guardian
plug Guardian.Plug.Pipeline, builder_opts()
plug Guardian.Plug.VerifySession, claims: %{"typ" => "access"}
plug Guardian.Plug.VerifyHeader, claims: %{"typ" => "access"}
plug Guardian.Plug.LoadResource, allow_blank: true
end