feat(auth): add user identity verification system with new screens
Some checks failed
Frontend CI / build-and-push-web (push) Successful in 4m54s
Frontend CI / ota-android (push) Failing after 7m28s
Frontend CI / build-android-apk (push) Has been cancelled

Add comprehensive identity verification flow including:
- New verification guide screen at /verification-guide for selecting identity type
- New verification form screen at /verification-form for submitting verification documents
- Verification settings screen at /profile/verification for managing verification status
- Move terms and privacy policy to root-level routes (/terms, /privacy)
- Update login to require active terms agreement checkbox
- Database: add in-memory fallback when OPFS is unavailable on web

BREAKING CHANGE: Terms and privacy policy routes moved from /profile/terms and /profile/privacy to /terms and /privacy
This commit is contained in:
lafay
2026-04-07 15:58:51 +08:00
parent accf7c04e8
commit 445c1c5561
17 changed files with 152 additions and 51 deletions

View File

@@ -254,7 +254,7 @@ export const SettingsScreen: React.FC = () => {
router.push(hrefs.hrefProfileEdit());
break;
case 'verification':
router.push('/profile/verification');
router.push(hrefs.hrefProfileVerification());
break;
case 'notification_settings':
router.push(hrefs.hrefProfileNotifications());

View File

@@ -84,7 +84,7 @@ export const VerificationSettingsScreen: React.FC = () => {
}, []);
const handleStartVerification = () => {
router.push('/auth/verification-guide');
router.push(hrefs.hrefVerificationGuide());
};
const handleViewRecords = () => {
@@ -109,27 +109,10 @@ export const VerificationSettingsScreen: React.FC = () => {
const identityText = IDENTITY_TEXT[status?.identity || 'general'];
return (
<SafeAreaView style={styles.container}>
<View style={styles.header}>
<TouchableOpacity
style={styles.backButton}
onPress={() => router.back()}
activeOpacity={0.8}
>
<MaterialCommunityIcons
name="arrow-left"
size={24}
color={colors.text?.primary || '#333'}
/>
</TouchableOpacity>
<Text style={styles.headerTitle}></Text>
<View style={styles.headerRight} />
</View>
<ScrollView
contentContainerStyle={styles.scrollContent}
showsVerticalScrollIndicator={false}
>
<ScrollView
contentContainerStyle={styles.scrollContent}
showsVerticalScrollIndicator={false}
>
{/* 状态卡片 */}
<View style={styles.statusCard}>
<View style={[styles.statusIconContainer, { backgroundColor: statusConfig.color + '20' }]}>
@@ -167,7 +150,7 @@ export const VerificationSettingsScreen: React.FC = () => {
<View style={styles.benefitItem}>
<View style={styles.benefitIconContainer}>
<MaterialCommunityIcons
name="verified"
name="check-decagram"
size={24}
color={THEME_COLORS.primary}
/>
@@ -183,7 +166,7 @@ export const VerificationSettingsScreen: React.FC = () => {
<View style={styles.benefitItem}>
<View style={styles.benefitIconContainer}>
<MaterialCommunityIcons
name="lock-open-variant"
name="lock-open-outline"
size={24}
color={THEME_COLORS.primary}
/>
@@ -199,7 +182,7 @@ export const VerificationSettingsScreen: React.FC = () => {
<View style={styles.benefitItem}>
<View style={styles.benefitIconContainer}>
<MaterialCommunityIcons
name="account-group"
name="account-group-outline"
size={24}
color={THEME_COLORS.primary}
/>
@@ -278,7 +261,6 @@ export const VerificationSettingsScreen: React.FC = () => {
</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};

View File

@@ -17,6 +17,7 @@ export { AccountSecurityScreen } from './AccountSecurityScreen';
export { AboutScreen } from './AboutScreen';
export { TermsOfServiceScreen } from './TermsOfServiceScreen';
export { PrivacyPolicyScreen } from './PrivacyPolicyScreen';
export { VerificationSettingsScreen } from './VerificationSettingsScreen';
// 导出 Hook 供需要自定义的场景使用
export { useUserProfile, createSharedProfileStyles, TABS, TAB_ICONS } from './useUserProfile';