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

用户运行Forge应用时获取通知的可行性及实现方案咨询

实现方案说明

该需求可以实现,核心逻辑分为两步:首先在用户通过Autodesk账户完成OAuth授权时获取包含邮箱的用户身份信息,其次集成邮件服务将登录记录推送到指定邮箱,优先使用Forge应用门户注册的开发者邮箱作为收件地址。

  • 需提前在Forge应用门户为你的应用申请user:read、data:read权限,同时完成应用和目标BIM 360 Hub的接入配置
  • 若仅需要统计通过你的Forge应用登录BIM 360 Hub的用户,直接在OAuth回调流程中捕获信息即可,实时性更高
  • 若需要统计所有登录目标BIM 360 Hub的用户(不限制是否通过你的应用),可搭配Forge Webhooks服务监听Hub访问事件触发通知
  • 邮件推送可按需选择Nodemailer、SendGrid等任意邮件服务,优先读取预设的开发者邮箱作为收件人,可额外配置硬编码的备用收件地址
核心代码示例(Node.js环境为例)

OAuth回调+用户信息获取代码

const axios = require('axios');
const nodemailer = require('nodemailer');

// 配置常量,敏感信息建议存环境变量,不要硬编码到生产代码
const FORGE_DEV_EMAIL = '你在Forge门户注册的开发者邮箱';
const BACKUP_NOTICE_EMAIL = '备用的硬编码收件邮箱';
const FORGE_CLIENT_ID = '你的Forge应用Client ID';
const FORGE_CLIENT_SECRET = '你的Forge应用Client Secret';
const OAUTH_CALLBACK_URL = '你的应用OAuth回调地址';

// OAuth授权回调处理接口
app.get('/oauth/callback', async (req, res) => {
  const authCode = req.query.code;
  try {
    // 1. 用授权码换取访问令牌
    const tokenResp = await axios.post(
      'https://developer.api.autodesk.com/authentication/v1/gettoken',
      new URLSearchParams({
        client_id: FORGE_CLIENT_ID,
        client_secret: FORGE_CLIENT_SECRET,
        grant_type: 'authorization_code',
        code: authCode,
        redirect_uri: OAUTH_CALLBACK_URL
      }),
      { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
    );
    const { access_token } = tokenResp.data;

    // 2. 调用接口获取用户身份信息(包含邮箱)
    const userResp = await axios.get(
      'https://developer.api.autodesk.com/userprofile/v1/users/@me',
      { headers: { Authorization: `Bearer ${access_token}` } }
    );
    const { emailId, userName, lastLoginDate } = userResp.data;

    // 3. 触发登录通知邮件推送
    await sendLoginNotice(emailId, userName, lastLoginDate);

    // 后续业务逻辑,比如跳转到应用首页
    res.redirect('/app-home');
  } catch (error) {
    console.error('登录信息处理失败:', error);
    res.status(500).send('登录处理出错');
  }
});

邮件推送代码

async function sendLoginNotice(userEmail, userName, loginTime) {
  // 配置SMTP邮件传输器,可替换为任意你使用的邮件服务
  const mailTransporter = nodemailer.createTransport({
    host: 'smtp.qq.com', // 示例用QQ邮箱SMTP,可按需替换为163、企业邮箱等服务商地址
    port: 465,
    secure: true,
    auth: {
      user: '发件人邮箱地址',
      pass: '发件人邮箱SMTP授权码'
    }
  });

  // 优先发送到Forge开发者邮箱,可配置抄送硬编码的备用邮箱
  await mailTransporter.sendMail({
    from: '"Forge应用登录监控" <发件人邮箱地址>',
    to: FORGE_DEV_EMAIL,
    cc: BACKUP_NOTICE_EMAIL,
    subject: 'BIM 360 Hub用户登录通知',
    html: `
      <p>新用户登录你的Forge应用:</p>
      <ul>
        <li>用户姓名:${userName}</li>
        <li>用户邮箱:${userEmail}</li>
        <li>登录时间:${new Date(loginTime).toLocaleString('zh-CN')}</li>
      </ul>
    `
  });
}
注意事项
  • 生产环境所有敏感凭证(Client Secret、SMTP授权码等)必须存储在环境变量或加密配置中,禁止直接硬编码在代码仓库里
  • 若需要监听非通过你的Forge应用的BIM 360 Hub登录行为,可配置Forge Webhooks监听Hub的data:read类事件,过滤登录场景触发通知
  • 可在代码中增加登录频次统计逻辑,将用户登录记录存入数据库后定期导出统计报表,满足使用人群、使用频次的分析需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:57:01