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

passport-microsoft报错MicrosoftStrategy is not a constructor

错误原因

TypeError: MicrosoftStrategy is not a constructor由导入写法错误直接导致:
passport-microsoft包的CommonJS入口默认导出就是MicrosoftStrategy构造函数,包本身没有暴露名为MicrosoftStrategy的命名导出属性。你当前代码中require('passport-microsoft').MicrosoftStrategy的写法实际取到的值是undefined,对undefined执行new实例化操作就会触发该类型错误。

另外你代码中使用REACT_APP_前缀读取环境变量存在隐患:该前缀是前端React构建工具专用的客户端环境变量标识,Passport运行在Node服务端,默认无法读取带该前缀的环境变量,后续如果遇到凭证为空的报错需要同步调整环境变量命名。

修复步骤
  • 替换错误的导入语句,直接引入包的默认导出:
// 移除原有的.MicrosoftStrategy取值
const MicrosoftStrategy = require('passport-microsoft')
  • 修正后可正常运行的完整参考代码:
const MicrosoftStrategy = require('passport-microsoft')
const passport = require("passport")

passport.use(new MicrosoftStrategy({
    clientID: process.env.MICROSOFT_APP_ID,
    clientSecret: process.env.MICROSOFT_APP_SECRET,
    callbackURL: "/auth/microsoft/callback",
    scope: ['user.read'],
    tenant: 'common',
    authorizationURL: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
    tokenURL: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
    },
    function(accessToken, refreshToken, profile, done) {
        return done(null, profile)
    }
))

passport.serializeUser((user,done) => {
    done(null, user)
})

passport.deserializeUser((user,done) => {
    done(null, user)
})

如果你使用ES Module规范编写代码,对应导入语句替换为import MicrosoftStrategy from 'passport-microsoft'即可。

内容的提问来源于stack exchange,提问作者I.T. G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:15:44