我有以下程序登录Google:
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 :(得分:2)
如果您正在使用sessions,那么您可以在重定向到Google之前设置/oauth/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;
...
});
如果您不使用会话,或由于某种原因会话无法使用,因为客户端不支持Cookie(这也应该是上述解决方案中的一个问题!),那么我想你最好的选择就是检查req.query.code
,因为除了查询字符串(req.query.code
)之外,Google重定向的请求与普通用户发出的直接请求之间没有区别。<登记/>
(... req.headers.referer / origin可以在理论上 但是they're unreliable and shouldn't be used as a measure)