You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Auth0登录后触发器的多个动作间传递站点标识信息?

解决Auth0登录后动作链中共享站点标识的问题

核心方案:利用event.transaction存储临时上下文

Auth0的登录后动作链中,event.transaction是专门用于在多个动作之间共享临时流程数据的对象,这比直接修改idToken或event根属性更可靠。

步骤1:在首个动作中标记站点标识

先通过登录上下文(如redirect_uri、客户端ID)判断站点,再将标识存入event.transaction:

exports.onExecutePostLogin = async (event, api) => {
  // 示例:通过redirect_uri区分站点,也可以用event.client.client_id(更可靠)
  const redirectUri = event.request.query.redirect_uri;
  let siteId;

  if (redirectUri?.includes('site-a.com')) {
    siteId = 'SiteA';
  } else if (redirectUri?.includes('site-b.com')) {
    siteId = 'SiteB';
  } else {
    siteId = 'Default';
  }

  // 存入transaction,后续动作可直接读取
  event.transaction.siteId = siteId;
};

步骤2:在后续动作中使用站点标识

直接从event.transaction读取标识,执行对应场景的逻辑:

exports.onExecutePostLogin = async (event, api) => {
  const siteId = event.transaction.siteId;

  if (siteId === 'SiteA') {
    // SiteA专属处理:比如添加自定义ID Token声明
    api.idToken.setCustomClaim('site_feature', 'a_exclusive');
  } else if (siteId === 'SiteB') {
    // SiteB专属处理:比如添加Access Token权限声明
    api.accessToken.setCustomClaim('site_role', 'b_admin');
  }
};

为什么之前的方法没生效?

  • 直接修改idToken:Auth0不允许直接修改event.idToken对象,必须通过api.idToken.setCustomClaim()方法添加自定义声明,否则不会生效。
  • 直接设置event根属性:event的根属性是Auth0预定义的,自定义属性无法在动作链中传递,而event.transaction是专门设计用于临时数据共享的容器。

额外注意事项

  • 如果需要将站点标识返回给前端,才需要用api.idToken.setCustomClaim()或api.accessToken.setCustomClaim();仅动作内部共享的话,用event.transaction即可。
  • 用event.client.client_id区分站点比redirect_uri更可靠,因为每个站点通常对应一个独立的Auth0客户端,避免redirect_uri被篡改的风险。

内容的提问来源于stack exchange,提问作者Hallel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:09