mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-21 06:49:37 +00:00
## Summary
- Added email verification flow for new users during onboarding
- Implemented invite code claiming with proper validation
- Updated API endpoints from `/invite/` to `/invite_code/` for
consistency
## Changes
### Email Verification
- Added `CloudVerifyEmailView` component with email verification UI
- Added email verification check after login in `CloudLoginView`
- Added `isEmailVerified` property to Firebase auth store
- Users must verify email before claiming invite codes
### Invite Code Flow
- Enhanced `CloudClaimInviteView` with full claim invite functionality
- Updated `InviteCheckView` to route users based on email verification
status
- Modified API to return both `claimed` and `expired` status for invite
codes
- Added proper error handling and Sentry logging for invite operations
### API Updates
- Changed endpoint paths from `/invite/` to `/invite_code/`
- Updated `getInviteCodeStatus()` to return `{ claimed: boolean;
expired: boolean }`
- Updated `claimInvite()` to return `{ success: boolean; message: string
}`
### UI/UX Improvements
- Added Korean translations for all new strings
- Improved button styling and layout in survey and waitlist views
- Added proper loading states and error handling
## Test Plan
- [ ] Test new user signup flow with email verification
- [ ] Test invite code validation (expired/claimed/valid codes)
- [ ] Test email verification redirect flow
- [ ] Test invite claiming after email verification
- [ ] Verify Korean translations display correctly
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
import type { RouteRecordRaw } from 'vue-router'
|
|
|
|
export const cloudOnboardingRoutes: RouteRecordRaw[] = [
|
|
{
|
|
path: '/cloud',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/components/CloudLayoutView.vue'),
|
|
children: [
|
|
{
|
|
path: 'login',
|
|
name: 'cloud-login',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudLoginView.vue')
|
|
},
|
|
{
|
|
path: 'signup',
|
|
name: 'cloud-signup',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudSignupView.vue')
|
|
},
|
|
{
|
|
path: 'forgot-password',
|
|
name: 'cloud-forgot-password',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudForgotPasswordView.vue')
|
|
},
|
|
{
|
|
path: 'survey',
|
|
name: 'cloud-survey',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudSurveyView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: 'waitlist',
|
|
name: 'cloud-waitlist',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudWaitlistView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: 'user-check',
|
|
name: 'cloud-user-check',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/UserCheckView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: 'code/:code',
|
|
name: 'cloud-invite-code',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudInviteEntryView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: 'invite-check',
|
|
name: 'cloud-invite-check',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/InviteCheckView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: 'claim-invite',
|
|
name: 'cloud-claim-invite',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudClaimInviteView.vue'),
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: 'verify-email',
|
|
name: 'cloud-verify-email',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudVerifyEmailView.vue')
|
|
},
|
|
{
|
|
path: 'sorry-contact-support',
|
|
name: 'cloud-sorry-contact-support',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudSorryContactSupportView.vue')
|
|
},
|
|
{
|
|
path: 'auth-timeout',
|
|
name: 'cloud-auth-timeout',
|
|
component: () =>
|
|
import('@/platform/onboarding/cloud/CloudAuthTimeoutView.vue')
|
|
}
|
|
]
|
|
}
|
|
]
|