Как сделать отдельный обратный звонок при регистрации для идентификации ueberauth?

ueberauth_identity имеет пример одного обратного вызова для входа в систему и регистрации, но это приводит к плохой обработке ошибок. Есть ли способ сделать отдельный обратный звонок при регистрации?

1 ответ

Я бы сказал, что это просто вопрос отправки определенного параметра и распространения его через все соответствующие вызовы. Я не уверен, насколько он в конечном итоге станет чище.

Скажем, например, что вы настроили его точно так же, как в документации:

      scope "/auth", MyApp do
  pipe_through :browser

  get "/:provider", AuthController, :request
  get "/:provider/callback", AuthController, :callback
  post "/identity/callback", AuthController, :identity_callback
end

Таким образом, когда вы хотите заставить пользователя войти в систему, вы перенаправляете его по следующему маршруту:

      Routes.auth_path(@conn, :request, "identity")

Что реализовано примерно так:

      defmodule UeberauthExampleWeb.AuthController do
  use UeberauthExampleWeb, :controller

  plug Ueberauth

  alias Ueberauth.Strategy.Helpers

  def request(conn, _params) do
    render(conn, "request.html", callback_url: Helpers.callback_url(conn))
  end

  # ...
end

Теперь ничто не мешает вам добавить некоторые параметры запроса, чтобы он выглядел так:

      Routes.auth_path(@conn, :request, "identity", login: true)

Что вы можете распространить на URL обратного вызова:

      def request(conn, %{"login" => _}) do
  callback_url = Helpers.callback_url(conn) <> "?login=true"
  render(conn, "request.html", callback_url: callback_url)
end

Чтобы вы, наконец, могли сопоставить шаблон в своем обратном вызове:

      def identity_callback(%{assigns: %{ueberauth_auth: auth}} = conn, %{"login" => _}) do
  # ...
end
Другие вопросы по тегам