Utiliser passeport-steam avec sails-generate-auth

Je crée une application SailsJS et je veux que les utilisateurs ne se connectent qu’avec l’authentification Steam. J’ai utilisé sails-generate-auth pour créer un code passe-partout avec les itinéraires de voiles, mais je ne parviens pas à y insérer le passeport.

https://github.com/kasperisager/sails-generate-auth

https://github.com/liamcurry/passport-steam

L’erreur signalée est:

 C:\Users\Joe\testProject\node_modules\passport-steam\lib\passport-steam\strategy.js:67 id: result.response.players[0].steamid, ^ TypeError: Cannot read property 'steamid' of undefined at steamapi.getPlayerSummaries.callback (C:\Users\Joe\testProject\node_modules\passport-steam\lib\passport-steam\strategy.js:67:43) at IncomingMessage. (C:\Users\Joe\testProject\node_modules\passport-steam\node_modules\steam-web\lib\steam.js:218:7) at IncomingMessage.emit (events.js:117:20) at _stream_readable.js:944:16 at process._tickDomainCallback (node.js:486:13) 

J’ai l’impression que cela est causé par le retour d’une réponse vide par SteamWebAPI: {"response":{"players":[]}} , provoquée par un faux SteamID dans la requête. La ligne en cause est ici dans passe-vapeur: https://github.com/liamcurry/passport-steam/blob/master/lib/passport-steam/strategy.js#L53

En getUserProfile paramètre identifier de getUserProfile , il semble que ce soit l’étendue de la demande Sails. Si je code une bonne steam ID dans ce tableau, j’obtiens cette erreur:

 C:\Users\Joe\testProject\api\services\passport.js:98 return next(new Error('Neither a username nor email was available')); ^ TypeError: undefined is not a function at Authenticator.passport.connect (C:\Users\Joe\testProject\api\services\passport.js:98:12) at module.exports (C:\Users\Joe\testProject\api\services\protocols\openid.js:24:12) at steamapi.getPlayerSummaries.callback (C:\Users\Joe\testProject\node_modules\passport-steam\lib\passport-steam\strategy.js:72:11) at IncomingMessage. (C:\Users\Joe\testProject\node_modules\passport-steam\node_modules\steam-web\lib\steam.js:218:7) at IncomingMessage.emit (events.js:117:20) at _stream_readable.js:944:16 at process._tickDomainCallback (node.js:486:13) 

Je pense que cela a du sens puisque la réponse steam n’a pas de nom d’utilisateur ni d’email, mais c’est le profil: {"emails":[{}],"name":{}}

Voici la configuration de mon passeport:

 steam: { name: 'Steam', protocol: 'openid', strategy: require('passport-steam').Strategy, options: { returnURL: 'http://localhost:1337/auth/steam/callback', realm: 'http://localhost:1337/', apiKey:'STEAM-API-KEY-REMOVED' } } } 

Je ne suis pas sûr s’il manque quelque chose de simple ou si je dois écrire une tonne de traitements personnalisés. Ma configuration est-elle correcte?

Ceci est dû à un code source obsolète dans npm. Même avec la dernière version 0.1.4, le code n’est pas correct. Le remplacement de strategy.js dans passport-steam par la dernière version corrigera cette erreur.

De plus, dans api\services\passport.js , un peu de traitement personnalisé dans passport.connect() doit être ajouté. Le profile n’a pas de username , mais a un id (utilisateur steamid) et un displayName . Ceux-ci peuvent être utilisés pour définir les propriétés du modèle utilisateur, par exemple

 //steam auth if (profile.hasOwnProperty('displayName')) { user.username = profile.displayName; } 

Voici le ticket où le problème a été résolu: https://github.com/liamcurry/passport-steam/issues/10