【问题标题】:Using passport-steam with sails-generate-auth使用带有sails-generate-auth的passport-steam
【发布时间】:2015-01-06 20:02:13
【问题描述】:

我正在创建一个 SailsJS 应用程序,我希望用户仅通过 Steam 身份验证登录。我使用sails-generate-auth 创建了一些带有航行路线的样板代码,但我无法将护照蒸汽插入其中。

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 引起的。违规行在护照蒸汽中:https://github.com/liamcurry/passport-steam/blob/master/lib/passport-steam/strategy.js#L53

查看identifier 参数到getUserProfile,它似乎是整个 Sails 请求范围。如果我将一个好的蒸汽 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)

我认为这是有道理的,因为蒸汽响应没有用户名或电子邮件,但这是个人资料:{"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'
      }
    }
  }

不确定我是否缺少一些简单的东西,或者我需要编写大量的自定义处理。我的配置正确吗?

【问题讨论】:

    标签: javascript node.js sails.js passport.js


    【解决方案1】:

    这是由 npm 中的过时源代码引起的。即使使用最新的 0.1.4 版本,代码也不正确。用latest version 替换passport-steam 中的strategy.js 将修复此错误。

    另外,在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

    【讨论】:

    • 我是 Sails/Passport/Steam 登录的新手。底线,我把这段代码放在哪里?任何人都可以上传带有 Sails 新项目的 git,并且只添加了 Steam 登录代码吗?
    • passport-steam npm 模块应该是最新的。您需要将上面的一小段代码添加到api/services/passport.js: connect functionprofile 对象应该有从 Steam API 返回的数据,因此您可以获取 Steam id、头像图像等。您还需要将 Steam Passport 配置添加到 config/passport.js。第一篇文章显示了要粘贴到module.exports.passport = { /* STEAM CONFIG HERE */ } 中的样板对象我已经有几个月没有使用 Sails,所以我不确定这个建议是否完全正确。
    猜你喜欢
    • 2015-06-07
    • 2015-07-01
    • 2015-06-28
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多