(J'ai déjà fait fbStrategy.passReqToCallback = true
) Je riffe https://scotch.io/tutorials/easy-node-authentication-linking-all-accounts-together mais je veux utiliser ce service d'authentification sociale pour plusieurs applications, ex : celui qui contrôle le système de chauffage, celui qui allume les arroseurs, etc.
Fondamentalement, si l'une de ces applications vérifie auprès du serveur et n'a pas de jeton correct, elle est redirigée vers ce service d'authentification sociale (social-auth). Lorsque l'utilisateur appuie sur les boutons de connexion sociale, il saisit le paramètre de quelle application il arrive et l'ajoute comme paramètre pour /auth/facebook/:appid
// send to facebook to do the authentication
app.get('/auth/facebook/:appId', function(req,res,next){
passport.authenticate(
'facebook', { scope : 'email' }
)(req,res,next);
});
req
de req,res,next
est l'enregistrement utilisateur sérialisé. À ce stade, social-auth ne sait pas qui est l'utilisateur.
fbStrategy.passReqToCallback = true;
passport.use(new FacebookStrategy(fbStrategy,
function(req, token, refreshToken, profile, done) {
var email = (profile.emails[0].value || '').toLowerCase()
process.nextTick(function() {...
Une fois l'autorisation terminée, je souhaite rediriger vers l'application appelante et j'ai besoin du :appId
param pour rouler afin que je puisse revenir sur le bon site.
Maintenant, en général, cela fonctionnerait si je rendais juste une variable comme currentAppId
accessible aux différentes stratégies sociales, mais si plusieurs personnes s'authentifiaient en même temps, il est possible qu'un utilisateur retourne à la mauvaise application, ou certaines autres applications des utilisateurs. C'est pourquoi j'ai besoin de appId
pour voyager en tant que param vers passport.authenticate
. Où devrais-je chercher pour comprendre comment. Puis-je envelopper passport.authenticate
ou autrement modifier les choses?
Vous pouvez utiliser la demande elle-même pour transférer des paramètres supplémentaires de et vers la fonction de stratégie. Dans l'exemple suivant, les deux paramètres _toParam
et _fromParam
sont utilisés pour cette préoccupation.
app.get('/auth/facebook/:appId', function(req,res,next){
req._toParam = 'Hello';
passport.authenticate(
'facebook', { scope : 'email' }
)(req,res,next);
})
fbStrategy.passReqToCallback = true;
passport.use(new FacebookStrategy(fbStrategy,
function(req, token, refreshToken, profile, done) {
console.log(req._toParam);
req._fromParam = 'Hello 2';
var email = (profile.emails[0].value || '').toLowerCase()
process.nextTick(function() {...
Si vous avez besoin de stocker l'identifiant pour d'autres requêtes, vous pouvez utiliser une carte avec le socket de la requête actuelle comme clé.