首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用护照.带帆的蒸汽.第4节

使用护照.带帆的蒸汽.第4节
EN

Stack Overflow用户
提问于 2015-01-06 20:02:13
回答 1查看 2.1K关注 0票数 3

我正在创建一个SailsJS应用程序,我希望用户只使用蒸汽身份验证登录。我使用sails-generate-auth创建了一些带有风帆路线的样板代码,但我在插入护照时遇到了麻烦。

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

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

报告的错误是:

代码语言:javascript
复制
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硬编码到那个数组中,我会得到以下错误:

代码语言:javascript
复制
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":{}}

这是我的护照配置:

代码语言:javascript
复制
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'
      }
    }
  }

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 15:27:07

这是由npm中过时的源代码造成的.即使使用最新的0.1.4版本,代码也是不正确的。将护照中的strategy.js替换为最新版本将修复此错误.

此外,在api\services\passport.js中,需要在passport.connect()中添加一些自定义处理。profile没有username,但是有一个id (用户模板)和displayName。这些可以用来设置用户模型属性。

代码语言:javascript
复制
//steam auth
if (profile.hasOwnProperty('displayName')) { 
  user.username = profile.displayName; 
}

以下是问题得到解决的门票:https://github.com/liamcurry/passport-steam/issues/10

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27806291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档