Prerequisites: Before you begin, ensure you have the following installed:
- Flutter 3.0 or newer configured for web
- Dart 2.17 or newer
- Familiarity with the Flutter CLI
flutter --versionIf you don’t have a Flutter web app, create one: flutter create --platforms=web my_appGet Started
This quickstart demonstrates how to add Auth0 authentication to a Flutter Web application. You’ll build a secure single-page app with login, logout, and user profile features using the Auth0 Flutter SDK.Install the Auth0 Flutter SDK
Add the Auth0 Flutter SDK to your project using the Flutter CLI:The SDK requires the Auth0 SPA JS library to be loaded in your web application. Add the following
<script> tag to your web/index.html file, before the closing </body> tag:web/index.html
Setup your Auth0 App
Next, you need to create a new application on your Auth0 tenant.You can choose to do this automatically by running a CLI command or manually via the Dashboard:
- CLI
- Dashboard
Run the following shell command in your project’s root directory to create an Auth0 application:macOS / Linux:Windows (PowerShell):Copy the domain and client_id values from the output. You’ll use these in the next step.
If you haven’t installed the Auth0 CLI yet, run:Then authenticate with
auth0 login.Configure the SDK
Create an instance of the
Auth0Web class with your Auth0 domain and client ID values.Create a new file lib/auth0_service.dart:lib/auth0_service.dart
Create the main view
Replace the contents of Key points:
lib/main.dart with the following code:lib/main.dart
onLoad()is called ininitState()to handle the authentication callbackloginWithRedirect()redirects users to Auth0’s Universal Login pagelogout()clears the session and redirects back to your app- User profile information is accessed via
credentials.user
CheckpointYou should now have a fully functional Auth0 login page running on http://localhost:3000. When you:
- Click “Log In” - you’re redirected to Auth0’s Universal Login page
- Complete authentication - you’re redirected back to your app
- Click “View Profile” - you see your user information
- Click “Log Out” - you’re logged out of both your app and Auth0
Advanced Usage
Calling Protected APIs
Calling Protected APIs
Configure the SDK to request an access token for calling protected APIs:Use the access token to call your API:
lib/auth0_service.dart
Custom Login Parameters
Custom Login Parameters
Pass additional parameters to the login flow:
Handling Login Errors
Handling Login Errors
Implement proper error handling for authentication failures:
Silent Authentication
Silent Authentication
Check if the user is already authenticated without showing the login page:
Troubleshooting
Common Issues and Solutions
Common Issues and Solutions
”Callback URL mismatch” error
Problem: The callback URL doesn’t match what’s configured in Auth0.Solution: Ensure the callback URL in your code matches exactly what’s in the Auth0 Dashboard:- Go to Auth0 Dashboard → Applications → Your App → Settings
- Verify Allowed Callback URLs includes
http://localhost:3000 - The URL must match exactly (no trailing slashes unless you include them in code)
Authentication not working
Problem: Login button does nothing or authentication fails.Solution: Verify the Auth0 SPA JS script is loaded inweb/index.html:</body> tag.User logged out after page refresh
Problem: User session doesn’t persist across page reloads.Solutions:- Ensure Allowed Web Origins includes
http://localhost:3000in Auth0 Dashboard - Use
cacheLocation: CacheLocation.localStoragewhen creating Auth0Web instance - Verify
onLoad()is called in your widget’sinitState()
”Invalid state” error
Problem: State mismatch during authentication callback.Solutions:- Clear browser cache and local storage
- Ensure you’re not opening multiple tabs during login
- Verify your callback URL is correct
CORS errors in browser console
Problem: Cross-Origin Resource Sharing errors.Solution:- Add
http://localhost:3000to Allowed Web Origins in Auth0 Dashboard - Ensure you’re running on port 3000 (matching your configuration)
Next Steps
Now that you have authentication working, consider exploring:- Flutter Native App Quickstart - Build a native mobile app with Auth0
- Calling Protected APIs - Use access tokens to call your backend APIs
- Customize Universal Login - Brand your login experience
- Add Social Connections - Enable Google, GitHub, and other social logins
- Implement MFA - Add multi-factor authentication
Resources
- Auth0 Flutter SDK GitHub - Source code and examples
- Flutter Documentation - Learn more about Flutter
- Auth0 Community - Get help from the community