Slack OAuth 回调在 Express 中返回 404

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

尝试使用 Slack OAuth 进行身份验证时,发生了一些非常奇怪的事情。基本上我有两条路线

/auth/slack
/auth/slack/callback
第一个工作并且它初始化oauth流但是一旦重定向uri命中它最终给我一个404。这是我如何设置它。

我用通行证策略做了一个服务

import passport from "passport";
const SlackStrategy = require('passport-slack').Strategy;

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

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

passport.use(new SlackStrategy({
    clientID: process.env.SLACK_CLIENT_ID,
    clientSecret: process.env.SLACK_CLIENT_SECRET,
    callbackURL: process.env.SLACK_REDIRECT_URI,
    scope: ['identity.basic', 'identity.email', 'identity.avatar', 'identity.team']
},
function(accessToken, refreshToken, profile, done) {
    return done(null, profile)
}
));

然后我创建了路由器

import { Router } from "express";
import passport from "passport";
require('../services/slack-service');


const slackRouter = Router();

slackRouter.get('/auth/error', (req, res) => res.send('Unknown Error'))
slackRouter.get('/auth/slack', passport.authenticate('slack', { scope: ['identity.basic']}));
slackRouter.get('/auth/slack/callback', passport.authenticate('slack', { failureRedirect: '/auth/error'}), function(req, res) {// get the authenticated user's Slack username from req.user
    console.log('hit')
  });

export { slackRouter } 

在 setup.js 文件中应用我需要的所有中间件

import 'dotenv/config';
import 'express-async-errors';

import cookieParser from 'cookie-parser';
import cors from 'cors';
import express from 'express';
import helmet from 'helmet';
import morgan from 'morgan';
import session from 'express-session';
import passport from 'passport';

import { errorHandler } from './middleware/errorHandler.middleware';
import { router } from './router';
import cookieSession from 'cookie-session';

export const applyMiddleware = app => {
    app.use(express.json())
    app.use(cors())
    app.use(cookieParser())
    app.use(morgan('tiny'))
    app.use(helmet())
    app.use(router)
    app.use(errorHandler())
    app.use(cookieSession({
        name: 'amazon-auth-service',
        keys: ['key1', 'key2']
    }))
    app.use(passport.initialize())
    app.use(passport.session())

}

主路由器

import { Http } from '@status/codes';
import { Router } from 'express';

import { googleRouter } from './micromodules/google/routes/google-routes';
import { slackRouter } from './micromodules/slack/routes/slack-routes';

const router = Router();

router.use(googleRouter)
router.use(slackRouter)

router.get('/', (request, response ) => {
    response.status(Http.ImATeapot).json({
        healthy: true,
    })
});

export { router }

和 app.js 文件

import express from 'express';

import { applyMiddleware } from './api/setup';
import { PORT } from '~config/environment';
import passport from 'passport';

const app = express();

applyMiddleware(app);

app.listen(process.env.PORT || 5000, () => {
    console.log('Server running at port', PORT)
});

所有环境变量都是正确的,我已经将重定向 uri 添加到 Slack 并使用 https 部署到 Heroku

javascript node.js express passport.js slack
© www.soinside.com 2019 - 2024. All rights reserved.