回调在 Express 中返回 404"/>
Slack OAuth 回调在 Express 中返回 404
尝试使用 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
回答如下:更多推荐
Slack OAuth 回调在 Express 中返回 404
发布评论