Я использую библиотеку паспортов для обработки входа пользователя, но в настоящее время столкнулся с проблемой. Когда пользователь вошел в систему, это не займет много времени, прежде чем он снова выйдет из системы, что является плохим UX.
Я что-то упускаю, чтобы логин пользователя был постоянным?
Вот мой код ниже:
Passport.js
// load all the things we need
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var TwitterStrategy = require('passport-twitter').Strategy;
// include the user model
var User = require('../app/model/user');
// include the auth credentials
var configAuth = require('./auth');
require('../app/model/upload');
module.exports = function(passport) {
// used to serialize the user for the session
passport.serializeUser(function(user, done) {
done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
// code for login (use('local-login', new LocalStategy))
// code for signup (use('local-signup', new LocalStategy))
// code for facebook (use('facebook', new FacebookStrategy))
// =========================================================================
// TWITTER =================================================================
// =========================================================================
passport.use(new TwitterStrategy({
consumerKey: configAuth.twitterAuth.consumerKey,
consumerSecret: configAuth.twitterAuth.consumerSecret,
callbackURL: configAuth.twitterAuth.callbackURL,
userProfileURL: "https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true",
includeEmail: true,
profileFields: ['emails']
},
function(token, tokenSecret, profile, done) {
// make the code asynchronous
// User.findOne won't fire until we have all our data back from Twitter
process.nextTick(function() {
User.findOne({
'member.id': profile.id
}, function(err, user) {
// if there is an error, stop everything and return that
// ie an error connecting to the database
if (err)
return done(err);
// if the user is found then log them in
if (user) {
return done(null, user); // user found, return that user
} else {
//declare emails as an array
//var emails = [];
// if there is no user, create them
var newUser = new User();
newUser.member.id = profile.id;
newUser.member.token = profile.token;
newUser.member.username = profile.username;
newUser.member.displayName = profile.displayName;
newUser.member.email = profile.emails[0].value;
newUser.member.medium = 'Twitter';
newUser.member.picture = profile._json.profile_image_url.replace('_original', '');
// save user credentials into the database
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
// res.cookie('username', newUser.twitter.username).send('Hello');
});
}
});
});
}));
};
В некоторых руководствах сказано, что я должен использовать сеанс паспорта, который я использовал, но ничего не изменилось:
Server.js
//read cookies (needed for auth)
app.use(cookieParser());
// get information from html forms
app.use(bodyParser());
//persistent login
app.use(session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
// persistent login sessions
app.use(passport.session());