我尝试将用户身份验证到我们自己的oauth2服务器后,将用户重定向到最初发布的URL。 为此,我已经读过可以将数据存储在附加到请求的会话对象中。但是,我在第一次重定向后丢失了数据,因此用户被重定向到我提供的后备网址。
以下是初始化应用
的代码const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const auth = require('./auth');
const app = express();
const router = express.Router();
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());
app.use(session({
secret: 'keyboard cat',
cookie: {
secure: true,
maxAge: 36000000
},
resave: false,
saveUninitialized: true
}));
auth.config(app);
app.get('/', (req, res) => res.json({ message: 'root' }));
app.get('/failure', (req, res) => res.json({ message: 'fail' }));
// load all the routes
require('../routes/posts')(router, auth);
app.use('/api', router);
app.use('/auth', auth.router);
auth模块如下:
const express = require('express');
const passport = require('passport');
const router = express.Router();
module.exports = {
config (app) {
passport.serializeUser((user, done) => done(null, user));
passport.deserializeUser((obj, done) => done(null, obj));
passport.use(new OAuth2Strategy({
authorizationURL,
tokenURL,
clientID,
clientSecret,
callbackURL
},
onAuthorize
));
app.use(passport.initialize());
app.use(passport.session());
router.get('/uaa', passport.authenticate('oauth2'));
router.get('/oauth/callback', passport.authenticate('oauth2'), (req, res) => {
req.session.save(err => {
if (err) throw err;
res.redirect(req.session.redirectTo || '/');
});
});
},
ensureAuthenticated (req, res, next) {
if (req.isAuthenticated()) return next();
if (!req.session.redirectTo) req.session.redirectTo = req.originalUrl;
req.session.save(err => {
if (err) return next(err);
res.redirect('/auth/uaa');
});
},
router
};
现在,如果我在浏览器上请求http://localhost:3333/api/questions
(匹配的路由描述为router.route('/questions').get(auth.ensureAuthenticated, PostController.questions.getAll)
),我将登陆ensureAuthenticated
函数,该函数存储初始路由(/api/questions
)但是当我进入我的oauth2回调的最终处理程序时,req.session.redirectTo
不存在。事实上,在重定向到/auth/uaa
之后它就不再存在了。
谢谢。
答案 0 :(得分:0)
这里的问题是我在通过HTTP提供内容时指定了一个安全的cookie。