Common Flow
All login endpoints follow this pattern:- Generate a random
statetoken (32-character hex string) - Resolve the application origin URL
- Build provider-specific authorization URL
- Set security cookies (state, origin, redirect_uri, flow)
- Redirect user to provider’s authorization page
Shared Query Parameters
Authentication flow type:
login- Standard login flow (default)bind- Account binding flow to link provider to existing user
SecondMe Login
Initiates SecondMe OAuth flow for primary authentication.Implementation Details
Source:src/app/api/auth/login/route.ts:11-60
Authorization URL: https://go.second.me/oauth/
Redirect URI: {appOrigin}/api/auth/callback
Scopes: Configured in src/lib/secondme.ts:10
user.infouser.info.shadesuser.info.softmemorychatnote.addvoice
Request
- cURL
- JavaScript
- HTML
Response
Redirects to SecondMe authorization page with parameters:From
SECONDME_CLIENT_ID environment variableCallback URL:
{appOrigin}/api/auth/callbackAlways
code (authorization code flow)CSRF protection token (32-character hex)
Cookies Set
State token for validation (httpOnly, 10min expiry)
Application origin URL (httpOnly, 10min expiry)
Callback redirect URI (httpOnly, 10min expiry)
Flow type:
login or bind (httpOnly, 10min expiry)GitHub Login
Initiates GitHub OAuth flow for developer authentication.Implementation Details
Source:src/app/api/auth/login/github/route.ts:11-25
Authorization URL: https://github.com/login/oauth/authorize
Redirect URI: {appOrigin}/api/auth/callback/github
Scopes: read:user user:email
Helper: buildGitHubAuthUrl() in src/lib/oauth.ts:22-31
Request
- cURL
- JavaScript
- HTML
Response
Redirects to GitHub authorization page with parameters:From
GITHUB_ID environment variableCallback URL:
{appOrigin}/api/auth/callback/githubread:user user:emailCSRF protection token (32-character hex)
Cookies Set
State token for validation (httpOnly, 10min expiry)
Application origin URL (httpOnly, 10min expiry)
Callback redirect URI (httpOnly, 10min expiry)
Flow type:
login or bind (httpOnly, 10min expiry)Google Login
Initiates Google OAuth flow for mainstream authentication.Implementation Details
Source:src/app/api/auth/login/google/route.ts:11-25
Authorization URL: https://accounts.google.com/o/oauth2/v2/auth
Redirect URI: {appOrigin}/api/auth/callback/google
Scopes: openid profile email
Additional Parameters:
access_type: offline- Requests refresh tokenprompt: consent- Forces consent screen
buildGoogleAuthUrl() in src/lib/oauth.ts:100-112
Request
- cURL
- JavaScript
- HTML
Response
Redirects to Google authorization page with parameters:From
GOOGLE_CLIENT_ID environment variableCallback URL:
{appOrigin}/api/auth/callback/googleAlways
code (authorization code flow)openid profile emailoffline - Requests refresh tokenconsent - Forces consent screen for refresh tokenCSRF protection token (32-character hex)
Cookies Set
State token for validation (httpOnly, 10min expiry)
Application origin URL (httpOnly, 10min expiry)
Callback redirect URI (httpOnly, 10min expiry)
Flow type:
login or bind (httpOnly, 10min expiry)Security Considerations
Cookie SecurityAll cookies are set with:
httpOnly: true- Prevents XSS attackssameSite: 'lax'- CSRF protectionsecure: true- HTTPS only (production)maxAge: 600- 10 minute expiration
Origin ResolutionThe
resolveAuthOrigin() function (from src/lib/auth-origin.ts) determines the correct application origin for dynamic environments (development, staging, production).Next Steps
Callback Handling
Learn how OAuth callbacks are processed after user authorization