Phoenix Kit Authentication Header Integration Guide
View SourceThis guide documents the steps to add authentication status display to your Phoenix application header when using the phoenix_kit library.
Prerequisites
- Phoenix application with
phoenix_kitinstalled and configured phoenix_kit_routes()already added to your router
Integration Steps
Step 1: Mount Authentication Scope in Router
Update your router to mount the authentication scope for your main live sessions. This makes @phoenix_kit_current_scope available in all LiveViews and layouts.
File: lib/your_app_web/router.ex
# Before
live_session :default, layout: {YourAppWeb.Layouts, :app} do
live "/", HomeLive
# ... other routes
end
# After
live_session :default,
layout: {YourAppWeb.Layouts, :app},
on_mount: [{PhoenixKitWeb.Users.Auth, :phoenix_kit_mount_current_scope}] do
live "/", HomeLive
# ... other routes
endStep 2: Import Authentication Helpers in Layout
Add the Scope alias to your layouts module to access authentication helper functions.
File: lib/your_app_web/components/layouts.ex
defmodule YourAppWeb.Layouts do
use YourAppWeb, :html
# Add this line
alias PhoenixKit.Users.Auth.Scope
embed_templates "layouts/*"
# ... rest of module
endStep 3: Add Authentication UI to Header
Update your header navigation to conditionally display authentication status and actions.
File: lib/your_app_web/components/layouts.ex (in the app/1 function)
<div class="flex-none">
<ul class="flex flex-row px-1 space-x-4 items-center">
<!-- Your existing navigation items -->
<%= if assigns[:phoenix_kit_current_scope] && Scope.authenticated?(assigns.phoenix_kit_current_scope) do %>
<!-- Logged in: Show user info and actions -->
<li class="hidden sm:flex items-center text-sm text-base-content/70">
<.icon name="hero-user-circle" class="size-4 mr-1" />
<%= Scope.user_email(assigns.phoenix_kit_current_scope) %>
</li>
<li>
<.link href={PhoenixKit.Utils.Routes.path("/users/settings")} class="btn btn-ghost btn-sm">
<.icon name="hero-user" class="size-4" />
<span class="hidden sm:inline ml-1">Account</span>
</.link>
</li>
<li>
<.link href={PhoenixKit.Utils.Routes.path("/users/log-out")} method="delete" class="btn btn-ghost btn-sm">
<.icon name="hero-arrow-right-on-rectangle" class="size-4" />
<span class="hidden sm:inline ml-1">Log out</span>
</.link>
</li>
<% else %>
<!-- Logged out: Show login/signup options -->
<li>
<.link href={PhoenixKit.Utils.Routes.path("/users/log-in")} class="btn btn-ghost btn-sm">
<.icon name="hero-arrow-left-on-rectangle" class="size-4" />
<span class="hidden sm:inline ml-1">Log in</span>
</.link>
</li>
<li>
<.link href={PhoenixKit.Utils.Routes.path("/users/register")} class="btn btn-primary btn-sm">
<.icon name="hero-user-plus" class="size-4" />
<span class="hidden sm:inline ml-1">Sign up</span>
</.link>
</li>
<% end %>
<!-- Your other navigation items like theme toggle -->
</ul>
</div>Available Phoenix Kit Routes
After integration, these authentication routes are available:
{prefix}/users/log-in- User login page{prefix}/users/register- User registration page{prefix}/users/settings- User account settings{prefix}/users/log-out- Logout endpoint (DELETE method){prefix}/users/magic-link- Passwordless login{prefix}/users/reset-password- Password reset flow
Where {prefix} is your configured PhoenixKit URL prefix (default: /phoenix_kit).
Authentication Helpers
Once the scope is mounted, you can use these helpers in your templates:
# Check if user is authenticated
Scope.authenticated?(@phoenix_kit_current_scope)
# Get user information
Scope.user(@phoenix_kit_current_scope) # Full user struct
Scope.user_email(@phoenix_kit_current_scope) # User's email
Scope.user_id(@phoenix_kit_current_scope) # User's ID
# Check user status
Scope.anonymous?(@phoenix_kit_current_scope) # Is anonymous?
Scope.admin?(@phoenix_kit_current_scope) # Has admin role?
Scope.owner?(@phoenix_kit_current_scope) # Has owner role?Styling Notes
The example uses:
- DaisyUI button classes (
btn,btn-ghost,btn-primary,btn-sm) - Heroicons for icons (
hero-user,hero-arrow-left-on-rectangle, etc.) - Responsive utilities to hide/show elements on mobile
Adjust the styling to match your application's design system.
Testing
After implementation:
- Visit your application homepage - you should see "Log in" and "Sign up" buttons
- Click "Sign up" to create an account
- After logging in, the header should display your email and show "Account" and "Log out" options
- The logout button should properly end your session
Troubleshooting
No authentication UI showing:
- Verify
on_mountis added to your live_session - Check that
phoenix_kit_routes()is called in your router - Ensure the Scope alias is imported in your layouts module
Routes not found:
Confirm routes with
mix phx.routes | grep phoenix_kit- Verify
phoenix_kitis properly installed in your dependencies
Logout not working:
- Ensure you're using
method="delete"on the logout link - The logout route requires a DELETE HTTP method, not GET