Files
nj/app/lib/features/auth/bloc/auth_event.dart
iven 99db8e5cb0
Some checks failed
Main Merge / backend (push) Has been cancelled
Main Merge / frontend (push) Has been cancelled
fix(app): 家长同意验证流程 — PIPL 第28条合规
- 新增 ParentalConsentPage: 显示隐私政策要点 + 双重确认复选框
- 角色选择流程: 学生 → 家长同意确认 → 班级码输入
- Authenticated 状态: 添加 needsParentalConsent/parentalConsentAt/selectedRole
- ParentalConsentAccepted 事件: 记录同意时间戳
- 路由守卫: 注册 /parental-consent 路径和重定向逻辑
- 非学生角色(老师/家长/独立用户)不需要经过同意流程

审计 ID: S-03
2026-06-03 10:25:23 +08:00

75 lines
1.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 认证事件 — AuthBloc 接收的用户操作和系统事件
part of 'auth_bloc.dart';
/// 认证事件基类 — 使用 sealed class 实现穷尽匹配
sealed class AuthEvent {
const AuthEvent();
}
/// App 启动 — 检查本地存储的认证状态
final class AppStarted extends AuthEvent {
const AppStarted();
}
/// 用户请求登录
final class LoginRequested extends AuthEvent {
final String username;
final String password;
const LoginRequested({
required this.username,
required this.password,
});
}
/// 用户请求注册
final class RegisterRequested extends AuthEvent {
final String username;
final String password;
final String? displayName;
const RegisterRequested({
required this.username,
required this.password,
this.displayName,
});
}
/// 用户选择角色(注册后的角色选择步骤)
final class RoleSelected extends AuthEvent {
final UserRoleType role;
const RoleSelected(this.role);
}
/// 家长/监护人同意 PIPL 信息收集(审计 S-03
final class ParentalConsentAccepted extends AuthEvent {
final DateTime consentAt;
const ParentalConsentAccepted(this.consentAt);
}
/// 班级码加入(学生/家长加入班级)
final class ClassCodeSubmitted extends AuthEvent {
final String classCode;
const ClassCodeSubmitted(this.classCode);
}
/// 用户请求登出
final class LogoutRequested extends AuthEvent {
const LogoutRequested();
}
/// 令牌刷新成功(由拦截器触发)
final class TokenRefreshed extends AuthEvent {
final AuthToken token;
const TokenRefreshed(this.token);
}
/// 认证失败(由 401 拦截器触发)
final class AuthExpired extends AuthEvent {
const AuthExpired();
}