Google 登录和 passport.js - 如何使用相同的路由处理来自 Android 和 iOS 的呼叫?
Google sign-in and passport.js - how to handle calls from Android and iOS using the same route?
我正在使用 passport.js 对来自 Android 和 iOS 应用程序的移动用户进行身份验证。
var GoogleTokenStrategy = require('passport-google-id-token');
var passport = require('passport');
module.exports = function(app) {
app.use(passport.initialize());
app.use(passport.session());
passport.use(new GoogleTokenStrategy({
clientID: "013323487228-563u02i6dk3vj3ic5q4l9g5r79vhqc4b.apps.googleusercontent.com"
}, function(parsedToken, googleId, done) {
// logic for finding user in db
}
));
app.post('/auth/google',
passport.authenticate('google-id-token'),
function (req, res) {
res.send(req.user? 200 : 401);
}
);
}
但是,Android 和 iOS 应用程序的客户端 ID 不同。我该如何处理?我应该为这两种情况设置不同的端点吗?两种不同的策略?甚至每个案例有两个不同的路由文件?
只需在您的 POST 请求(platform: android
或 platform: ios
)中传递另一个参数,然后在服务器端对该变量进行操作。无需其他路线。
我还没有用 OAuth 策略测试过这个,但是你可以通过 naming them, and you can use multiple strategies in single route 拥有相同策略的多个实例。所以,也许你可以使用这些并使用两种策略:
var loginHandler = function(parsedToken, googleId, done) {
// logic for finding user in db
};
passport.use('android', new GoogleTokenStrategy({
clientID: "android-token"
}, loginHandler));
passport.use('ios', new GoogleTokenStrategy({
clientID: "iphone-token"
}, loginHandler));
然后在 authenticate
调用中同时使用:
app.post('/auth/google',
passport.authenticate(['android', 'ios']),
function (req, res) {
res.send(req.user ? 200 : 401);
});
或者,如果列出多个策略不起作用,则使用路由参数和 custom callback:
app.post('/auth/google/:platform(android|ios)', function(req, res, next) {
passport.authenticate(req.params.platform, function(err, user, info) {
// ...
})(req, res, next);
});
我正在使用 passport.js 对来自 Android 和 iOS 应用程序的移动用户进行身份验证。
var GoogleTokenStrategy = require('passport-google-id-token');
var passport = require('passport');
module.exports = function(app) {
app.use(passport.initialize());
app.use(passport.session());
passport.use(new GoogleTokenStrategy({
clientID: "013323487228-563u02i6dk3vj3ic5q4l9g5r79vhqc4b.apps.googleusercontent.com"
}, function(parsedToken, googleId, done) {
// logic for finding user in db
}
));
app.post('/auth/google',
passport.authenticate('google-id-token'),
function (req, res) {
res.send(req.user? 200 : 401);
}
);
}
但是,Android 和 iOS 应用程序的客户端 ID 不同。我该如何处理?我应该为这两种情况设置不同的端点吗?两种不同的策略?甚至每个案例有两个不同的路由文件?
只需在您的 POST 请求(platform: android
或 platform: ios
)中传递另一个参数,然后在服务器端对该变量进行操作。无需其他路线。
我还没有用 OAuth 策略测试过这个,但是你可以通过 naming them, and you can use multiple strategies in single route 拥有相同策略的多个实例。所以,也许你可以使用这些并使用两种策略:
var loginHandler = function(parsedToken, googleId, done) {
// logic for finding user in db
};
passport.use('android', new GoogleTokenStrategy({
clientID: "android-token"
}, loginHandler));
passport.use('ios', new GoogleTokenStrategy({
clientID: "iphone-token"
}, loginHandler));
然后在 authenticate
调用中同时使用:
app.post('/auth/google',
passport.authenticate(['android', 'ios']),
function (req, res) {
res.send(req.user ? 200 : 401);
});
或者,如果列出多个策略不起作用,则使用路由参数和 custom callback:
app.post('/auth/google/:platform(android|ios)', function(req, res, next) {
passport.authenticate(req.params.platform, function(err, user, info) {
// ...
})(req, res, next);
});