passport实现discord认证时报Unknown authentication strategy "discord"错误
解决方案
Error: Unknown authentication strategy "discord" 报错的核心原因是 passport 在调用认证逻辑时,还没有加载到你定义的discord策略,你可以按照以下顺序排查问题:
- 优先检查项目主入口文件(通常为
app.js/index.js)的代码执行顺序,必须保证策略加载代码在 passport 初始化、认证路由挂载之前执行,正确的顺序示例如下:
const express = require('express') const passport = require('passport') require('dotenv').config() // 第一步:先加载discord策略配置 require('./path/to/discordstrategy.js') const app = express() // 第二步:初始化passport app.use(passport.initialize()) // 第三步:最后挂载认证相关路由 const authRouter = require('./path/to/auth.js') app.use('/auth/discord', authRouter)
- 检查
discordstrategy.js中passport.use('discord', new DiscordStrategy(...))的策略名称参数,和auth.js中passport.authenticate('discord')的参数是否完全一致,注意不要出现大小写、拼写错误。 - 运行
npm list passport-discord检查依赖是否正常安装,缺失的话执行npm install passport-discord重新安装即可。
另外你当前discordstrategy.js的策略回调中没有调用done()方法,虽然不会触发本次报错,但后续认证流程会卡住,你可以参考以下逻辑补全:
// discordstrategy.js 策略回调部分修改示例 }, async (accessToken, refreshToken, profile, done) => { console.log(profile); try { // 查找数据库中是否已存在该discord用户 let user = await DiscordUser.findOne({ discordId: profile.id }) if (!user) { // 不存在则新建用户 user = await DiscordUser.create({ discordId: profile.id, username: profile.username, email: profile.email, avatar: profile.avatar }) } // 认证成功,返回用户信息 return done(null, user) } catch (err) { // 出现错误,返回错误信息 return done(err, null) } }));
内容的提问来源于stack exchange,提问作者Libra
相关产品推荐
相关产品推荐

