AnyLogin
Provides a development-only account switcher for Phoenix applications.
The runtime is provided by the package itself. The generator only wires the shared runtime into an application and does not create application-specific modules.
Generator
Run the generator from a Phoenix application:
mix phx.gen.any_login Accounts users
The arguments are an existing context module and the users table name. The
application's UserAuth module must expose log_in_user/2 (as generated by
mix phx.gen.auth).
Useful options:
mix phx.gen.any_login Accounts users --web MyAppWeb --auth MyAppWeb.UserAuth
For a non-standard schema location, pass its full module name explicitly:
mix phx.gen.any_login Accounts users --schema MyApp.Accounts.User
It updates the application automatically:
- configures the repository, schema, and authentication module
- adds the AnyLogin Plug to the browser pipeline
- adds the account-switcher route under
/dev - renders the component in the root layout
The integration is idempotent, so rerunning the generator does not duplicate
these additions. Pass --no-inject to print manual integration instructions
without modifying the project.
Generated Integration
For local development, add the package using a path dependency:
def deps do
[
{:any_login, path: "../any_login"}
]
end
Then fetch dependencies and run the generator from the Phoenix application:
mix deps.get
mix phx.gen.any_login Accounts users
The generator adds this development configuration:
config :any_login,
repo: MyApp.Repo,
schema: MyApp.Accounts.User,
auth: MyAppWeb.UserAuth
That command performs the complete integration. The resulting browser pipeline contains:
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, html: {MyAppWeb.Layouts, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_scope_for_user
plug AnyLogin.Plug,
enabled: Application.compile_env(:my_app, :dev_routes, false)
end
The development-only route is added as:
if Application.compile_env(:my_app, :dev_routes, false) do
scope "/dev", AnyLogin do
pipe_through :browser
post "/account-switcher", Controller, :switch
end
end
The shared component is added to the root layout:
<%= if assigns[:any_login_enabled] do %>
<AnyLogin.Component.account_switcher
users={@any_login_users}
current_user={assigns[:current_scope] && assigns[:current_scope].user}
return_to={@any_login_return_to}
/>
<% end %>
Start the application normally:
mix phx.server
The switcher appears in the bottom-left corner only when :dev_routes is
enabled.
Installation
If available in Hex, the package can be installed
by adding any_login to your list of dependencies in mix.exs:
def deps do
[
{:any_login, "~> 0.1.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/any_login.