Магазин 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)
        }
});

0 ответов

Другие вопросы по тегам