👽 Support other auth factors

🐛 Fix redirect url did not work
This commit is contained in:
LittleSheep 2025-02-02 22:31:46 +08:00
parent 7600e3f93d
commit 80d3dac2b0
2 changed files with 13 additions and 10 deletions

View File

@ -8,6 +8,8 @@ import { useState } from 'react'
import ErrorIcon from '@mui/icons-material/Error' import ErrorIcon from '@mui/icons-material/Error'
import PasswordIcon from '@mui/icons-material/Password' import PasswordIcon from '@mui/icons-material/Password'
import EmailIcon from '@mui/icons-material/Email' import EmailIcon from '@mui/icons-material/Email'
import PinIcon from '@mui/icons-material/Pin'
import NotificationsActiveIcon from '@mui/icons-material/NotificationsActive'
export function SnLoginRouter({ export function SnLoginRouter({
ticket, ticket,
@ -18,8 +20,13 @@ export function SnLoginRouter({
factorList: SnAuthFactor[] factorList: SnAuthFactor[]
onNext: (val: SnAuthFactor) => void onNext: (val: SnAuthFactor) => void
}) { }) {
const factorTypeIcons = [<PasswordIcon key="password-icon" />, <EmailIcon key="email-icon" />] const factorTypeIcons = [
const factorTypeLabels = ['Password', 'Email verification code'] <PasswordIcon key="password-icon" />,
<EmailIcon key="email-icon" />,
<PinIcon key="pin-icon" />,
<NotificationsActiveIcon key="notification-icon" />,
]
const factorTypeLabels = ['Password', 'Email verification code', 'Time-based OTP', 'In-app verification code']
const [error, setError] = useState<string | null>(null) const [error, setError] = useState<string | null>(null)
const [loading, setLoading] = useState<boolean>(false) const [loading, setLoading] = useState<boolean>(false)

View File

@ -6,6 +6,7 @@ import { useUserStore } from 'solar-js-sdk'
import { Box, Container, Typography } from '@mui/material' import { Box, Container, Typography } from '@mui/material'
import { useRouter } from 'next/router' import { useRouter } from 'next/router'
import { useState } from 'react' import { useState } from 'react'
import { useSearchParams } from 'next/navigation'
export default function Login() { export default function Login() {
const [period, setPeriod] = useState<number>(0) const [period, setPeriod] = useState<number>(0)
@ -14,17 +15,12 @@ export default function Login() {
const [factor, setFactor] = useState<SnAuthFactor | null>(null) const [factor, setFactor] = useState<SnAuthFactor | null>(null)
const router = useRouter() const router = useRouter()
const searchParams = useSearchParams()
const userStore = useUserStore() const userStore = useUserStore()
function doCallback() { function doCallback() {
if (router.query['redirect_url']) { let redirectUrl = searchParams.get('redirect_url')
let redirectUrl: string if (redirectUrl) {
if (Array.isArray(router.query['redirect_url'])) {
redirectUrl = router.query['redirect_url'][0]
} else {
redirectUrl = router.query['redirect_url'].toString()
}
if (redirectUrl.startsWith('/')) { if (redirectUrl.startsWith('/')) {
router.push(redirectUrl) router.push(redirectUrl)
} else { } else {