用户运行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
相关产品推荐
相关产品推荐

