导出中间件身份验证功能,在 Express.js 和 Discord OAuth2 中使用通行证配置文件外

问题描述 投票:0回答:0

我正在使用 Discord OAuth2 提供商编写应用程序。我使用过 passport 和 passport-discord 库。我已经创建了中间件来检查身份验证,现在我想将其导出以用于其他文件。我不能。

index.js :

const express = require('express')
const app = express()
const session = require('express-session');
const passport = require('passport');
const DiscordStrategy = require('passport-discord').Strategy;

// Configuration
app.use(session({
  secret: 'super-secret-session-code',
  resave: false,
  saveUninitialized: false
}));

// Init Passport.js
app.use(passport.initialize());
app.use(passport.session());

// Config Discord OAuth
const discordStrategy = new DiscordStrategy({
  clientID: '<MyClientId>',
  clientSecret: '<MyClientSecret>',
  callbackURL: 'http://192.168.0.4:3001/auth/discord/callback',
  scope: ['identify', 'email']
}, async (accessToken, refreshToken, profile, done) => {

  done(null, user);
});

passport.use(discordStrategy);

// Serialise and deserialise user
passport.serializeUser((user, done) => {
  done(null, user);
});

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

这个功能,只适用于

index.js

function isAuthenticated(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  //res.redirect('/auth/discord');
  res.sendStatus(401)
}

req.isAuthenticated()
- 此行仅适用于此文件,我什至无法将该功能导出到其他文件...

当我尝试将其导入其他文件时:

const isAuthenticated = require('./index').isAuthenticated

或与

module.exports = ...

并将其用作中间件:

router.use('/dashboard', isAuthenticated, dashboard)

我得到一个错误:

Error: Route.get() requires a callback function but got a [object Undefined]

也许这是我对JavaScript不熟悉的错误,但如果有人能帮助我,我将不胜感激!

javascript express discord passport.js middleware
© www.soinside.com 2019 - 2024. All rights reserved.