Next JS 13 + Auth 0-基于特定条件重定向用户

zbsbpyhn  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(75)

我正在使用NextJS 13 + Auth 0构建一个新的应用程序。NextJs版本是13.4.19,而auth 0 lib版本是3.1.0。我正在使用服务器组件。文件是\app\api\auth\[auth0]\route.ts
我有一个自定义的回调处理程序

const afterCallback = async (req: NextRequest, session: Session, state: { [key: string]: any }) => {
    if (session.user.email_verified) {
        console.log('email verified..continuing')
        return session;
    } else {
      // redirect('http://localhost:3000/verify-email', RedirectType.replace);     
      // return NextResponse.redirect(new URL('http://localhost:3000/verify-email'))
       headers.set('location', '/verify-email');
    }

    console.log('printing after redirect')    
    return session;
};

字符串
我的authHandlers

export const GET = handleAuth({
    callback: async (req: any, res: any) => {
        try {
            console.log('callback method called')
           return await handleCallback(req, res, {
                afterCallback,
               // redirectUri: 'http://localhost:3000/dashboard'
            });
        } catch (error) {
            console.error(error);
        }
    },

  login: async (req: NextApiRequest, res: NextApiResponse) => {
        console.log('login method called')
        return await handleLogin(req, res, {
            // authorizationParams: {
            //     redirect_uri: 'http://localhost:3000/api/auth/callback',
            //   },
            returnTo: `/dashboard`,
        });
    },


我不知道如何重定向用户到/verify-email页面时,用户的电子邮件没有验证。
我尝试了不同的选项,但没有运气.使用redirect抛出一个错误,按照文档.-https://nextjs.org/docs/app/api-reference/functions/redirect在文档中还有另一个例子使用headers.set('location', '/verify-email');然而,这也不工作,因为头是只读的.我得到下面的错误CAUSE: next_headers__WEBPACK_IMPORTED_MODULE_1__.headers.set is not a function
有没有人知道我如何可以推动用户/verify-email页的情况下,电子邮件是未经验证的. TIA

yjghlzjz

yjghlzjz1#

参见文档:https://github.com/auth0/nextjs-auth0/blob/26b54f3/src/handlers/callback.ts#L74C4-L74C4

* @example Redirect successful login based on claim
 *
 * ```js
 * // pages/api/auth/[auth0].js
 * import { handleAuth, handleCallback } from '@auth0/nextjs-auth0';
 *
 * const afterCallback = (req, res, session, state) => {
 *   if (!session.user.isAdmin) {
 *     res.setHeader('Location', '/admin');
 *   }
 *   return session;
 * };
 *
 * export default handleAuth({
 *   async callback(req, res) {
 *     try {
 *       await handleCallback(req, res, { afterCallback });
 *     } catch (error) {
 *       res.status(error.status || 500).end(error.message);
 *     }
 *   }
 * });
 * ```

字符串

相关问题