0
我试图在将用户身份验证到我们自己的oauth2服务器后将用户重定向到最初发布的URL。 为此,我读过可以将数据存储在附加到请求的会话对象中。但是,我在第一次重定向后丢失了数据,因此用户被重定向到我提供的后备网址。如何使用PassportJS&Express重定向后保留会话数据
下面是初始化应用程序的代码
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);
中的授权模块如下:
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
(匹配路由descrition是router.route('/questions').get(auth.ensureAuthenticated, PostController.questions.getAll)
)我登陆存储初始路由的ensureAuthenticated
函数(/api/questions
),但当我登录到我的oauth2回调的最终处理程序时,req.session.redirectTo
不存在。实际上,它在重定向到/auth/uaa
后不再存在。
- 我配置错了吗?
- 我的路由器声明可以吗?
- 为什么我无法访问之前存储的数据?
谢谢。
现在有这个问题。你怎么解决它? – Yomo710
在我的具体情况下,它与https相关。所以我删除了安全cookie选项,并在此后按预期工作。 – kalnic29