#1057·passport

如何使用 passportJS 策略与 ApolloServer 一起使用

作者: eraycetinx创建于 2026年4月14日更新于 2026年8月26日

import express from 'express'; import { Prisma } from '@peerpush/db'; import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; import { typeDefs } from './src/graphql/schema/typeDefs.js'; import { resolvers } from './src/graphql/resolvers/index.js'; import passport from 'passport'; import { Strategy as GitHubStrategy } from 'passport-github2'; import session from 'express-session'; import dotenv from 'dotenv';

(async function () { dotenv.config(); const app = express(); const server = new ApolloServer({ typeDefs, resolvers, }); app.use(session({ secret: 'keyboard cat', resave: false, // don't save session if unmodified saveUninitialized: false, // don't create session until something stored }));

app.use(passport.authenticate('session')); app.get('/auth/GitHub',passport.authenticate('GitHub'));

passport.serializeUser(function(user, done) { done(null, user); });

passport.deserializeUser(function(obj, done) { done(null, obj); });

passport.use(new GitHubStrategy({ clientID: process.env['clientID']!, clientSecret: process.env['clientSecret']!, callbackURL: "/oauth2/redirect/GitHub" }, function(accessToken, refreshToken, profile, done) { console.log({accessToken, refreshToken, profile}); } ));

app.get('/login/federated/GitHub', passport.authenticate('GitHub'));

app.get('/oauth2/redirect/GitHub', passport.authenticate('GitHub', { successReturnToOrRedirect: '/', failureRedirect: '/login' }));

const { url } = await startStandaloneServer(server, { listen: { port: 4000 }, }); console.log( Server ready at: ${url});

app.listen(4001,() => console.log('server'));

})().then(async () => { await Prisma.$disconnect(); }).catch(async (e) => { console.error(e); await Prisma.$disconnect(); process.exit(1); })

内容来源: jaredhanson/passport