resolveAuthCallbackRouteDecision function
AuthCallbackRouteDecision
resolveAuthCallbackRouteDecision({
- required String? providerId,
- required AuthProvider? provider,
- required Map<
String, dynamic> query,
Resolves callback branching decisions used by auth route handlers.
Missing or empty providerId returns missing_provider; a null provider
returns unknown_provider. OAuth requires a non-empty code and preserves
optional state. Magic-link callbacks require a non-empty token and an
email, falling back to identifier only when email is null. A
CallbackProvider selects the custom branch; other types return
unsupported_provider. Query values use toString() and are not trimmed.
Implementation
AuthCallbackRouteDecision resolveAuthCallbackRouteDecision({
required String? providerId,
required AuthProvider? provider,
required Map<String, dynamic> query,
}) {
if (providerId == null || providerId.isEmpty) {
return const AuthCallbackRouteDecision.error('missing_provider');
}
if (provider == null) {
return const AuthCallbackRouteDecision.error('unknown_provider');
}
if (provider is OAuthProvider) {
final code = _stringValue(query['code']);
if (code == null || code.isEmpty) {
return const AuthCallbackRouteDecision.error('missing_code');
}
return AuthCallbackRouteDecision.oauth(
code: code,
state: _stringValue(query['state']),
);
}
if (provider is AuthMagicLinkProvider) {
final token = _stringValue(query['token']);
final email =
_stringValue(query['email']) ?? _stringValue(query['identifier']);
if (token == null || token.isEmpty || email == null || email.isEmpty) {
return const AuthCallbackRouteDecision.error('missing_token');
}
return AuthCallbackRouteDecision.email(token: token, email: email);
}
if (provider is CallbackProvider) {
return const AuthCallbackRouteDecision.custom();
}
return const AuthCallbackRouteDecision.error('unsupported_provider');
}