Node.js中Azure AD认证后自动关闭Magic Code弹窗的需求
实现Azure AD认证弹窗5秒后自动关闭的解决方案
嗨,我来帮你搞定这个弹窗自动关闭的问题!你现在返回的是纯文本内容,没法触发自动关闭的逻辑,只要把返回的内容改成带JavaScript的HTML页面就行,具体修改如下:
修改弹窗触发的代码
把原来的纯文本响应改成包含定时器脚本的HTML:
res.send(` <!DOCTYPE html> <html> <head> <title>Authentication Code</title> <script> // 设置5秒后自动关闭窗口 setTimeout(() => { window.close(); }, 5000); </script> </head> <body> <p>Welcome ${req.user.displayName}! Please copy this number and paste it back to your chat so your authentication can complete: <strong>${magicCode}</strong></p> <p style="color:#666;">This window will close automatically in 5 seconds...</p> </body> </html> `);
为什么这样有效?
- 我们返回的是完整的HTML页面,嵌入了
setTimeout脚本,页面加载完成后会等待5秒,然后调用window.close()关闭当前弹窗。 - 额外添加了提示文本,让用户明确知道窗口会自动关闭,体验更友好;同时用
<strong>标签高亮了magic code,方便用户复制。
注意事项
- 确保这个弹窗是通过
window.open()这类方式打开的(OAuth流程的回调弹窗一般都是如此),因为浏览器的安全策略不允许脚本关闭非脚本触发打开的窗口。 - 如果你的回调接口里的
res.send('Sign-in successful')也是弹窗显示的,同样可以用类似方式修改,让它也自动关闭:
res.send(` <!DOCTYPE html> <html> <head> <title>Sign-in Successful</title> <script> setTimeout(() => { window.close(); }, 5000); </script> </head> <body> <p>Sign-in successful! This window will close automatically in 5 seconds...</p> </body> </html> `);
这样修改后,用户拿到magic code后,弹窗就会在5秒后自动关闭啦~
内容的提问来源于stack exchange,提问作者C P Verma
相关产品推荐
相关产品推荐

