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