Hello everybody!
I’m trying to setup Twitter login on my app. I’m using Node, passport.js , Mongo I want to do something super simple:
- Check if user exists
- Store it in Mongo
- Once user is logged in, display username
After 10+ tutorials I’m still struggling (I’m just starting node)
I’m not sure where to check against the database (in deserializeUser ? in the Strategy ?) Neither console.log command is executing…
Thanks for your help!
Here is my code so far:
app.use(passport.initialize());
app.use(passport.session());
app.use(cookieParser());
app.use(bodyParser());
app.use(require('express-session')({ secret: 'keyboard bobcat', resave: true, saveUninitialized: true }));
passport.use(new Strategy({
consumerKey: CONSUMER_KEY,
consumerSecret: CONSUMER_SECRET,
callbackURL: "http://127.0.0.1:8080/auth/twitter/callback"
},
async function (token, tokenSecret, profile, done) {
var currentUser = await db.collection('users').findAndModify({ "twitterId": profile.id},
[['twitterId','1']],
{ "$set": { "name" : profile.name,
"access_token_key" : token,
"access_token_secret" : tokenSecret } },
{"upsert":true},
{"new":true});
console.log("using strategy?");
done(null, profile);
})
);
passport.serializeUser(function(user, cb) {
cb(null, user);
});
passport.deserializeUser(async function(obj, cb) {
var currentUser = await db.collection('users').findAndModify({ "twitterId": profile.id},
[['twitterId','1']],
{ "$set": { "name" : profile.name,
"access_token_key" : token,
"access_token_secret" : tokenSecret } },
{"upsert":true},
{"new":true});
req.user=currentUser
console.log("deserializing?");
cb(null, obj);
});
app.get('/login', passport.authenticate('twitter'));
app.get('/auth/twitter/callback',
async function (req,res) {
try {
passport.authenticate('twitter', { failureRedirect: '/login' })
res.send(req.username)
} catch(e) {
console.log(e)
}
});