Add auth in minutes, not months
Get users signing up, logging in, and resetting passwords today. Support Google, Apple, Facebook, Microsoft, X, GitHub, SSO, magic links, OTP, and more without building it from scratch. No lock-in—export your data anytime.
Get Started FreeShip user authentication today
Everything you need to add users to your app, with zero lock-in and full data portability.
Quick Setup
Add signup, login, and password reset to your app in under 10 minutes. Just copy our URLs or embed our widget.
Multiple Providers
Support Google, Apple, Facebook, Microsoft, X (Twitter), GitHub, SSO, magic links, OTP, and traditional email/password authentication without managing multiple integrations.
No Lock-in
Export all user data, including password hashes and algorithms, whenever you want. Move to your own auth system anytime.
Just one callback function
See how easy it is to verify users across different languages and frameworks
$ curl "http://signin.fast/@your-domain.com/verify?token=abc123"
{
"success": true,
"user": {
"id": 12,
"email": "john@example.com",
"name": "John Smith",
"photo": "https://signin.fast/photos/user_12345.jpg",
"provider": "google",
"verified": true,
"password_digest": "$2b$12$7iO9oU0pC1F7x8Xk1ZcNDeeFzE0cZ3WkzJYjz1t0KJHk9cPZQ0lFe",
"created_at": "2024-01-15T10:30:00Z"
},
"session": {
"long_lived_token": "sess_abc123def456"
}
}
def callback
token = params[:token]
resp = HTTParty.get("http://signin.fast/@your-domain.com/verify?token=#{token}")
user = User.where(email: resp["user"]["email"]).first_or_create!
session[:user_id] = user.id
redirect_to dashboard_path, notice: "Logged in!"
end
function callback() {
$token = $_GET['token'];
$response = file_get_contents("http://signin.fast/@your-domain.com/verify?token=" . $token);
$userData = json_decode($response, true)['user'];
// Create or find user
$user = findOrCreateUser($userData['email']);
$_SESSION['user_id'] = $user['id'];
header('Location: /dashboard');
}
public function callback(Request $request)
{
$token = $request->get('token');
$response = Http::get("http://signin.fast/@your-domain.com/verify?token={$token}");
$userData = $response->json()['user'];
$user = User::firstOrCreate(['email' => $userData['email']]);
Auth::login($user);
return redirect('/dashboard')->with('message', 'Logged in!');
}
import requests
from flask import session, redirect, request
def callback():
token = request.args.get('token')
resp = requests.get(f"http://signin.fast/@your-domain.com/verify?token={token}")
user_data = resp.json()['user']
# Create or find user
user = User.get_or_create(email=user_data['email'])
session['user_id'] = user.id
return redirect('/dashboard')
import requests
from django.contrib.auth import login
from django.shortcuts import redirect
def callback(request):
token = request.GET.get('token')
resp = requests.get(f"http://signin.fast/@your-domain.com/verify?token={token}")
user_data = resp.json()['user']
user, created = User.objects.get_or_create(email=user_data['email'])
login(request, user)
return redirect('/dashboard')
const axios = require('axios');
app.get('/callback', async (req, res) => {
const { token } = req.query;
const response = await axios.get(`http://signin.fast/@your-domain.com/verify?token=${token}`);
const userData = response.data.user;
// Create or find user
const user = await User.findOrCreate({ email: userData.email });
req.session.userId = user.id;
res.redirect('/dashboard');
});
That's it! One simple callback to handle user authentication across any platform.