feat: member phone login — POST /public/auth/member-login + /my/login page

Returning members can now sign in with just their phone number.
The bot DMs them a 6-digit OTP; on verify a 30-day session cookie is set.
First-time users are directed to their invite link from the login page.

- Make OtpChallenge.groupId optional (migration) for re-login challenges
- Add memberLogin / memberVerify service methods
- Add POST /public/auth/member-login and /member-verify controller endpoints
- Add /api/my/login BFF route (sets tower_member_token cookie)
- Add /my/login page (phone → OTP two-step form)
- /my/* now redirects to /my/login instead of /onboard on no session

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-20 16:37:19 +05:30
parent e61b0dfebd
commit a1d2c6e6c2
7 changed files with 281 additions and 3 deletions
+1 -1
View File
@@ -496,7 +496,7 @@ model OtpChallenge {
scopes ConsentScope[]
retentionDays Int @default(90)
policyVersion String
groupId String
groupId String?
expiresAt DateTime
consumedAt DateTime?
sentAt DateTime?