2015-06-29 1 views
0

У меня есть следующая программа войти в систему с помощью Google:Блок регулярных пользователей от Google AUTH обратного вызова Экспресс Маршрут

app.get('/oauth/google', function(req, res) { 
    res.redirect(<OAUTH2_URL>); 
}); 

app.get('/oauth/google/callback', function(req, res, next) { 

    var code = req.query.code; 
    if(!code || !_.isString(code)) { 
    return next(new Error(400, 'Invalid code')); 
    } 

    . 
    . 
    . 

    // I try the code to see if it is valid. 

}); 

Как только позволит Googles перенаправить обратно в приложение, чтобы иметь доступ к маршруту обратного вызова, и заблокировать обычных пользователей от его использования?

+0

Что вы используете для Google AUTH? заграничный пасспорт? – laggingreflex

+0

@laggingreflex Просто переадресовать на https://accounts.google.com/o/oauth2/auth с моими желаемыми областями. Когда пользователь принимает, Google отправляет их обратно на URL-адрес перенаправления, который я указал в консоли разработчиков, которая является «/ oauth/google/callback». – Tholle

ответ

1

Если вы используете sessions, тогда вы можете установить флаг из своего пути /oauth/google, прежде чем перенаправлять его в Google, а затем на свой /oauth/google/callback просто проверьте этот флаг и выполните сброс.

app.get('/oauth/google', function(req, res) { 
    req.session.authFlag = true; 
    res.redirect(<OAUTH2_URL>); 
}); 

app.get('/oauth/google/callback', function(req, res, next) { 
    if (!req.session.authFlag) return next(new Error(403, 'Forbidden')); 
    else req.session.authFlag = false; 
    ... 
}); 

Если вы не используете сессии, хотя, или по какой-то причине сессии не доступны, потому что клиент не поддерживает куки (которые должны быть проблемой в упомянутом выше решении, как хорошо!), То я угадайте, что ваш лучший выбор - просто проверить на req.query.code, потому что кроме этой строки запроса (req.query.code) нет никакой разницы между запросами, перенаправленными Google и прямыми запросами, сделанными обычным пользователем.
(... req.headers.referer/происхождение мог бы работал в теории но they're unreliable and shouldn't be used as a measure)

+0

Вау, почему я не подумал об этом? Спасибо laggingreflex! – Tholle