在Auth0重定向请求流程中,如何向Action回传信息?
解决方案
核心结论
完全可以安全地将非敏感的user handle作为查询参数传递——由于该信息本身设计为公开,不存在敏感数据泄露的安全风险。以下是具体实现步骤:
1. 修改前端提交代码
更新onSubmit方法,将handle通过查询参数传递到Auth0的/continue端点,用encodeURIComponent处理特殊字符避免格式问题:
import { useRouter } from "next/router"; export default function ChooseHandle() { const router = useRouter(); const { state } = router.query; const auth0Domain = "whatever"; const handle = "the-value"; // 用户输入的handle const onSubmit = () => { const encodedHandle = encodeURIComponent(handle); fetch(`https://${auth0Domain}/continue?state=${state}&handle=${encodedHandle}`, { method: "GET" }); }; return <button onClick={onSubmit}>submit</button>; }
2. 更新Auth0 Continue Action代码
在onContinuePostLogin中,直接从event.request.query获取传递的handle,验证合法性后更新用户的app_metadata:
const { ManagementClient } = require('auth0'); exports.onExecutePostLogin = async (event, api) => { if (event.user.app_metadata?.handle) { return; } api.redirect.sendUserTo( "https://strands.octue.com/onboarding/choose-handle", { query: {} } ); }; exports.onContinuePostLogin = async (event, api) => { // 从查询参数中获取handle const { handle } = event.request.query; // 可选:添加handle合法性校验(比如格式、是否已被占用) if (!handle || handle.length < 3) { api.redirect.sendUserTo("https://strands.octue.com/onboarding/choose-handle", { query: { error: "invalid_handle" } }); return; } // 使用Auth0 Management API更新用户app_metadata const management = new ManagementClient({ domain: event.secrets.AUTH0_DOMAIN, clientId: event.secrets.AUTH0_MANAGEMENT_CLIENT_ID, clientSecret: event.secrets.AUTH0_MANAGEMENT_CLIENT_SECRET, }); try { await management.updateAppMetadata({ id: event.user.user_id }, { handle }); } catch (error) { console.error("Failed to update app metadata:", error); api.access.deny("Failed to save your handle, please try again."); } };
3. 必要配置
- 在Auth0控制台的Actions > Secrets中添加
AUTH0_DOMAIN、AUTH0_MANAGEMENT_CLIENT_ID、AUTH0_MANAGEMENT_CLIENT_SECRET(需创建具有update:users_app_metadata权限的Machine to Machine应用)。 - 前端收集页面需支持处理校验失败的重定向(比如显示错误提示)。
内容的提问来源于stack exchange,提问作者thclark
相关产品推荐
相关产品推荐

