我正在使用 auth0 nextjs-auth0库来处理 next.js 应用程序的注册和身份验证。我还使用Formik来处理输入数据和验证。我想通过 Formik 将电子邮件地址提交到 Next.js api 路由。
当我使用 Nextjs 的useRouter
钩子导航router.push
到 api 路由时,它按预期工作,因此我的数据被传递到 api 路由并且 nextjs-auth0 按预期重定向用户。但是,在重定向浏览器控制台之前会闪烁以下错误:
我应该忽略这个错误吗?是否有可能router.push
仅用于客户端重定向我正在尝试导航到 api 路由,这不是应该如何完成的?注意,我的/signup
api 路由使用 auth0-nextjs 代码并将用户重定向到 auth0 的身份验证页面。相关代码如下。
注册api路由:
import auth0 from "../../../lib/auth0"
export default async function signup(req, res) {
const {
query: { pid },
} = req
try {
await auth0.handleLogin(req, res, {
authParams: {
initialScreen: "signup",
login_hint: pid
},
})
} catch (error) {
console.error(error)
res.status(error.status || 500).end(error.message)
}
}
导入 useRouter 钩子:
import { useRouter } from 'next/router'
Formik 的验证功能:
function validateEmail(value) {
let error;
let re = /\S+@\S+\.\S+/
if (!value) {
error = "Email is required"
} else if (!re.test(value)) {
error = "Please use a valid email"
}
return error
}
Formik 提交的处理函数:
const handleFormikSubmit = async (values, actions) => {
router.push('/api/signup/[...pid]', `/api/signup/${values.email}`)
actions.setSubmitting(false)
}
Formik 组件(注意,使用 <Button 组件是Chakra-ui组件):
<Formik
initialValues={{ email: "" }}
onSubmit={handleFormikSubmit}
>
{(props) => (
<form onSubmit={props.handleSubmit}>
<Field type="email" name="email" validate={validateEmail}>
{({ field, form }) => (
<FormControl
isInvalid={
form.errors.email &&
form.touched.email
}
>
<Input
{...field}
id="email"
placeholder="Your email address..."
/>
<FormErrorMessage>
{form.errors.email}
</FormErrorMessage>
</FormControl>
)}
</Field>
<Button
variantColor="orangish"
width="100%"
mt={2}
className="checkout-style-background"
isLoading={props.isSubmitting}
type="submit"
>
Sign up to get started for $1
</Button>
</form>
)}
</Formik>