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.
相关产品推荐
相关产品推荐

