feat: 切换邮箱认证并重构前后端启动与门禁
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
class AuthUser {
|
||||
const AuthUser({required this.id, required this.email});
|
||||
|
||||
final String id;
|
||||
final String email;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
class SessionResponse {
|
||||
SessionResponse({
|
||||
required this.accessToken,
|
||||
required this.refreshToken,
|
||||
required this.expiresIn,
|
||||
required this.tokenType,
|
||||
required this.userId,
|
||||
required this.userEmail,
|
||||
});
|
||||
|
||||
final String accessToken;
|
||||
final String refreshToken;
|
||||
final int expiresIn;
|
||||
final String tokenType;
|
||||
final String userId;
|
||||
final String userEmail;
|
||||
|
||||
factory SessionResponse.fromJson(Map<String, dynamic> json) {
|
||||
final user = (json['user'] as Map<String, dynamic>?) ?? <String, dynamic>{};
|
||||
final accessToken = json['access_token'] as String?;
|
||||
final refreshToken = json['refresh_token'] as String?;
|
||||
final expiresIn = json['expires_in'] as int?;
|
||||
final tokenType = json['token_type'] as String?;
|
||||
final userId = user['id'] as String?;
|
||||
final userEmail = user['email'] as String?;
|
||||
|
||||
if (accessToken == null ||
|
||||
refreshToken == null ||
|
||||
expiresIn == null ||
|
||||
tokenType == null ||
|
||||
userId == null ||
|
||||
userEmail == null) {
|
||||
throw const FormatException('Invalid session response payload');
|
||||
}
|
||||
|
||||
return SessionResponse(
|
||||
accessToken: accessToken,
|
||||
refreshToken: refreshToken,
|
||||
expiresIn: expiresIn,
|
||||
tokenType: tokenType,
|
||||
userId: userId,
|
||||
userEmail: userEmail,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user