将 passport-steam 与 sails-generate-auth 结合使用
Using passport-steam with sails-generate-auth
我正在创建一个 SailsJS 应用程序,我希望用户仅使用 Steam 身份验证登录。我使用 sails-generate-auth
创建了一些带有航行路线的样板代码,但我无法将 passport-steam 插入其中。
https://github.com/kasperisager/sails-generate-auth
https://github.com/liamcurry/passport-steam
报告的错误是:
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.<anonymous> (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)
我感觉这是由 SteamWebAPI 返回一个空响应引起的:{"response":{"players":[]}}
,这是由请求中的虚假 SteamID 引起的。有问题的行在 passport-steam 中:https://github.com/liamcurry/passport-steam/blob/master/lib/passport-steam/strategy.js#L53
查看 getUserProfile
的 identifier
参数,它似乎是整个 Sails 请求范围。如果我将一个好的 Steam ID 硬编码到该数组中,我会收到此错误:
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.<anonymous> (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)
我认为这是有道理的,因为 Steam 回复没有用户名也没有电子邮件,但这是个人资料:{"emails":[{}],"name":{}}
这是我的护照配置:
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'
}
}
}
不确定我是否遗漏了一些简单的东西,或者我需要编写大量的自定义处理。我的配置正确吗?
这是由 npm 中的过时源代码引起的。即使使用最新的 0.1.4 版本,代码也不正确。将 passport-steam 中的 strategy.js
替换为 latest version 将修复此错误。
此外,在 api\services\passport.js
中,需要在 passport.connect()
中添加一些自定义处理。 profile
没有 username
,但有 id
(用户 steamid)和 displayName
。这些可用于设置用户模型属性,例如
//steam auth
if (profile.hasOwnProperty('displayName')) {
user.username = profile.displayName;
}
这是解决问题的工单:https://github.com/liamcurry/passport-steam/issues/10
我正在创建一个 SailsJS 应用程序,我希望用户仅使用 Steam 身份验证登录。我使用 sails-generate-auth
创建了一些带有航行路线的样板代码,但我无法将 passport-steam 插入其中。
https://github.com/kasperisager/sails-generate-auth
https://github.com/liamcurry/passport-steam
报告的错误是:
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.<anonymous> (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)
我感觉这是由 SteamWebAPI 返回一个空响应引起的:{"response":{"players":[]}}
,这是由请求中的虚假 SteamID 引起的。有问题的行在 passport-steam 中:https://github.com/liamcurry/passport-steam/blob/master/lib/passport-steam/strategy.js#L53
查看 getUserProfile
的 identifier
参数,它似乎是整个 Sails 请求范围。如果我将一个好的 Steam ID 硬编码到该数组中,我会收到此错误:
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.<anonymous> (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)
我认为这是有道理的,因为 Steam 回复没有用户名也没有电子邮件,但这是个人资料:{"emails":[{}],"name":{}}
这是我的护照配置:
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'
}
}
}
不确定我是否遗漏了一些简单的东西,或者我需要编写大量的自定义处理。我的配置正确吗?
这是由 npm 中的过时源代码引起的。即使使用最新的 0.1.4 版本,代码也不正确。将 passport-steam 中的 strategy.js
替换为 latest version 将修复此错误。
此外,在 api\services\passport.js
中,需要在 passport.connect()
中添加一些自定义处理。 profile
没有 username
,但有 id
(用户 steamid)和 displayName
。这些可用于设置用户模型属性,例如
//steam auth
if (profile.hasOwnProperty('displayName')) {
user.username = profile.displayName;
}
这是解决问题的工单:https://github.com/liamcurry/passport-steam/issues/10