Wire SMS registration, forgot password, and one-time login.

Connect business and customer login pages to login-otp and reset-password, and document the auth flows in project context.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-05 15:10:51 +03:30
co-authored by Cursor
parent d8c9c0b017
commit c33cab40fe
12 changed files with 148 additions and 114 deletions
+10 -2
View File
@@ -13,6 +13,7 @@ import { getTenantDomain } from '../lib/config'
import {
fetchCurrentUser,
login as loginRequest,
loginWithOtp as loginWithOtpRequest,
logout as logoutRequest,
} from '../services/authService'
import { resolveTenantByDomain } from '../services/tenantService'
@@ -22,6 +23,7 @@ interface AuthContextValue {
user: AuthUser | null
isLoading: boolean
login: (cellNumber: string, password: string) => Promise<void>
loginWithOtp: (cellNumber: string, code: string) => Promise<void>
logout: () => void
setUser: (user: AuthUser) => void
}
@@ -124,9 +126,15 @@ export function AuthProvider({ children }: { children: ReactNode }) {
setUser(data.user)
}, [])
const loginWithOtp = useCallback(async (cellNumber: string, code: string) => {
const data = await loginWithOtpRequest(cellNumber, code)
await assertCustomerAccess(data.user)
setUser(data.user)
}, [])
const value = useMemo(
() => ({ user, isLoading, login, logout, setUser }),
[user, isLoading, login, logout],
() => ({ user, isLoading, login, loginWithOtp, logout, setUser }),
[user, isLoading, login, loginWithOtp, logout],
)
return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>