passport. js throws Ошибка: не удается установить заголовки после их отправки - PullRequest
1 голос
/ 15 февраля 2020

Я читал другие решения, но они не работают для меня.

[1] Это говорит об использовании else, которое я уже использовал.
[2] Еще один говорит об использовании return с done, что кажется нелогичным, поскольку в документах не упоминается использование return

У меня есть страница, которую мне нужно загрузить, независимо от того, является ли пользователь вошли или нет. Если пользователь не вошел в систему, я должен показать кнопку входа, в противном случае кнопку выхода.

Это маршрут, где происходит ошибка:

app.get('/', (req, res, next) => {
    if(req.query.code || req.cookie) { //either first time authenticating or already a user
        passport.authenticate('google')(req, res, next)
    }
    res.render('index', { user: req.user });
})

Это маршрут I ударил, когда пользователь нажал на логин:

app.get('/google', passport.authenticate('google', {
    scope: ['profile', 'email']
}));

Это мои настройки паспортной стратегии:

passport.use(
    new GoogleStrategy({
        callbackURL: `${process.env.address}`,
        clientID: `${process.env.GOOGLE_SSO_CLIENT_ID}`,
        clientSecret: `${process.env.GOOGLE_SSO_CLIENT_SECRET}`,

    }, (accessToken, refreshToken, profile, done) => {

        if(accessToken) {
            User.findOne({email: profile.email}).then((currentUser) => {

                if(currentUser){ // already exists
                    console.log('user is: ', currentUser);
                    done(null, currentUser)
                    // do something
                } else { // if not, create user in our db
                    new User({
                        email: profile.email,
                        joinDate: Date.now(),
                        username: 'random'
                    }).save().then((newUser) => {
                        console.log('created new user: ', newUser);
                        done(null, newUser)
                        // do something
                    });
                }
            });
        } else {
            done(null, null)
        }
    })
)

Возможно, проблема в том, что я пытаюсь попасть по URL, где

1 Ответ

0 голосов
/ 15 февраля 2020

Я предполагаю, что это сработает на вашей работе?

app.get('/', (req, res, next) => {
    if(req.query.code || req.cookie) { 
        passport.authenticate('google', function(req, res, next) {
           res.render('index', { user: req.user });
        });
    } else {
        res.render('index');
    }
})
...