Магазин Twitter Войти в Mongo и отображать имя пользователя
Я пытаюсь настроить вход в Twitter в своем приложении. Я использую Node, passport.js, Mongo, я хочу сделать что-то очень простое:
- Проверьте, существует ли пользователь
- Храните его в Монго
- Как только пользователь вошел в систему, отобразить имя пользователя
После 10+ уроков я все еще борюсь (я только начинаю нод)
Я не уверен, где проверять базу данных (в deserializeUser? В Стратегии?) Ни одна из команд console.log не выполняется...
Вот мой код до сих пор
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)
}
});