护照和智威汤逊

所以我设法让passport-twitter和jsonwebtoken库一起工作,但为了使它正常工作,我必须使用express-session作为中间件。 我不想添加会话,因为我使用jsonwebtoken来返回令牌。

这里是代码autheticate.js

router.get('/twitter', function(req, res, next){ passport.authenticate('twitter', {session: false}, function(err, user, info){ if(err){ return next(err); } if(user){ var token = createToken(user); console.log(token); return res.json({token: token}); } else { return res.status(401).json(info); } })(req, res, next); }); 

我已经添加了session:false作为参数,但是在server.js上,它一直在吐出错误,我需要使用express-session。

server.js

 var express = require('express'); var path = require('path'); var logger = require('morgan'); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var passport = require('passport'); var session = require('express-session'); var config = require('./config'); mongoose.connect('mongodb://localhost', function() { console.log("Connected to the database"); }) require('./passport')(passport); var app = express(); var authenticate = require('./routes/authenticate')(app, express, passport); var api = require('./routes/api') (app, express, passport); // uncomment after placing your favicon in /public //app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(session({ secret: config.TOKEN_SECRET, resave: true, saveUninitialized: true, })); app.use(express.static(path.join(__dirname, 'public'))); app.use(passport.initialize()); app.use('/auth', authenticate); app.use('/api', api); app.get('*', function(req, res) { res.sendFile(__dirname + '/public/app/views/index.html'); }); app.listen(3000, function(err) { if(err) { return res.send(err); } console.log("Listening on port 3000"); }); 

所以每当我删除app.use(会话()),并尝试使用passport-twitter进行身份validation。 我会得到这个错误

错误Oauth策略需要app.use(快速会话));

我知道明显的解决办法是添加该行,但我不想使用会话。 Oauth 0.1是否真的需要使用会话?

基于OAuth的护照策略使用会话中间件来跟踪login过程。 您不需要使用会话中间件进行其他任何操作,只需将身份validation基于您的令牌并忽略该会话即可。