ec33bb0cee
- 合并 auth 端点: /verifications/verify → /verify, /verifications/resend → /resend - 整合密码重置到 /verify 端点 (type=recovery) - 移除未使用的 /auth/users 端点 - 添加 redirect URL 白名单验证 (site_url + additional_redirect_urls) - 限流改用 Redis + IP 标识,替代内存锁 - 删除 v1/profile 死代码模块 - 更新前端 auth_api 适配新端点 - 添加 supabase site_url 和 additional_redirect_urls 配置
80 lines
2.1 KiB
Dart
80 lines
2.1 KiB
Dart
import 'package:social_app/core/api/i_api_client.dart';
|
|
import 'models/signup_request.dart';
|
|
import 'models/login_request.dart';
|
|
import 'models/auth_response.dart';
|
|
|
|
class AuthApi {
|
|
final IApiClient _client;
|
|
static const _prefix = '/api/v1/auth';
|
|
|
|
AuthApi(this._client);
|
|
|
|
Future<VerificationCreateResponse> createVerification(
|
|
SignupStartRequest request,
|
|
) async {
|
|
final response = await _client.post(
|
|
'$_prefix/verifications',
|
|
data: request.toJson(),
|
|
);
|
|
return VerificationCreateResponse.fromJson(response.data);
|
|
}
|
|
|
|
Future<AuthResponse> verifyVerification(SignupVerifyRequest request) async {
|
|
final response = await _client.post(
|
|
'$_prefix/verify',
|
|
data: {'type': 'signup', ...request.toJson()},
|
|
);
|
|
return AuthResponse.fromJson(response.data);
|
|
}
|
|
|
|
Future<void> resendVerification(SignupResendRequest request) async {
|
|
await _client.post(
|
|
'$_prefix/resend',
|
|
data: {'type': 'signup', ...request.toJson()},
|
|
);
|
|
}
|
|
|
|
Future<AuthResponse> createSession(LoginRequest request) async {
|
|
final response = await _client.post(
|
|
'$_prefix/sessions',
|
|
data: request.toJson(),
|
|
);
|
|
return AuthResponse.fromJson(response.data);
|
|
}
|
|
|
|
Future<AuthResponse> refreshSession(RefreshRequest request) async {
|
|
final response = await _client.post(
|
|
'$_prefix/sessions/refresh',
|
|
data: request.toJson(),
|
|
);
|
|
return AuthResponse.fromJson(response.data);
|
|
}
|
|
|
|
Future<void> deleteSession(LogoutRequest request) async {
|
|
await _client.delete('$_prefix/sessions', data: request.toJson());
|
|
}
|
|
|
|
Future<void> requestPasswordReset(String email) async {
|
|
await _client.post(
|
|
'$_prefix/resend',
|
|
data: {'type': 'recovery', 'email': email},
|
|
);
|
|
}
|
|
|
|
Future<void> confirmPasswordReset({
|
|
required String email,
|
|
required String token,
|
|
required String newPassword,
|
|
}) async {
|
|
await _client.post(
|
|
'$_prefix/verify',
|
|
data: {
|
|
'type': 'recovery',
|
|
'email': email,
|
|
'token': token,
|
|
'new_password': newPassword,
|
|
},
|
|
);
|
|
}
|
|
}
|