defmodule Amur do @moduledoc """ Simple OAuth for Plug apps. ## Setup ```elixir # mix.exs {:amur, "~> 0.1"} # config/runtime.exs config :amur, providers: [ github: [ client_id: System.fetch_env!("GITHUB_CLIENT_ID"), client_secret: System.fetch_env!("GITHUB_CLIENT_SECRET") ] ], on_success: &MyApp.Accounts.find_or_create/3, on_failure: &MyApp.Accounts.auth_failed/2 # router.ex forward "/auth", Amur.Router ``` Mount `Amur.Router` under `/auth` in your router with `forward "/auth", Amur.Router`. In Phoenix, place the forward inside your browser pipeline so session and flash helpers are available if your callbacks use them, and use `alias: false` on the scope that contains the forward so Phoenix does not rewrite the module name. It works with both `Phoenix.Router` and `Plug.Router`. It exposes: - `GET /auth/:provider` to start the OAuth flow - `GET /auth/:provider/callback` to handle the callback - `GET /auth/logout` to clear Amur's stored session params The helper below only clears Amur's stored OAuth session params. """ def logout(conn) do conn |> Plug.Conn.delete_session(:amur_session_params) end end