【问题标题】:How to implement Steam Auth with Firebase?如何使用 Firebase 实现 Steam 身份验证?
【发布时间】:2017-11-29 04:59:04
【问题描述】:

我发现的只是这个旧答案:

https://groups.google.com/forum/#!topic/firebase-talk/rApG8QQd6t4

SOer 同行是否知道任何信息,或者 Firebase 工程师能否提供更详细的答案?

我目前正在尝试使用此库通过 Steam 对用户进行身份验证:

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

然后使用 Firebase 自定义令牌在我的 Firebase 身份验证系统中获取用户。

我不知道这是否是正确的方法。无论如何,我被困住了。


编辑:

这是我当前的代码:

app.js

var passport = require('passport');
var SteamStrategy = require('passport-steam').Strategy;

app.use(passport.initialize());

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(obj, done) {
  done(null, obj);
});

passport.use(new SteamStrategy({
    returnURL: 'http://localhost:8080/users/steam/return',
    realm: 'http://localhost:8080/',
    apiKey: steamKey.steam,
    stateless:true
  },
  function(identifier, profile, done) {

    profile.identifier = identifier;
    return done(null, profile);
  }
));

users.js

    router.get('/steam', passport.authenticate('steam', { failureRedirect: 'login' }), function(req, res, next) {

});

router.get('/steam/return', 
  function(req, res, next) {
      req.url = req.originalUrl;
      next();
  }, 
  passport.authenticate('steam', { failureRedirect: 'users/login' }),
  function(req, res) {
    console.log(JSON.stringify(req.query));
    var oid = req.query["openid.claimed_id"];
    var array = oid.split("/id/");
    console.log("Array: "+array);
    var result = array[1];
    console.log(result);
    admin.auth().createCustomToken(result)
      .then(function(customToken) {
         res.render("users/login",{token: customToken, passed: true});
      })
      .catch(function(error) {
        console.log("Error creating custom token:", error);
      });
});

用户/login.ejs:

<a href="steam"><img id="steamLogin" src="../../public/assets/steamLogin.png"/></a>
    <script>

        if ("<%=passed%>" == "true") {
            firebase.auth().signInWithCustomToken("<%=token%>").catch(function(error) {
                if (error) {
                    alert(error);
                }
                else {
                    res.redirect("screenshots/index");
                }

            });   
        }  

    </script>

我目前的问题如下:

1) 这可行,但会将 Steam 声明的 ID 公开为用户的公共 UID。公开用户声称的 ID 是否安全?这是否意味着任何人都可以使用他声称的 ID 来冒充我的用户?

2) 我的 Firebase 身份验证仪表板中的“标识符”下没有任何内容。用户登录时如何指定标识符?

3) 实际上,在创建自定义令牌时我应该使用什么作为uid

【问题讨论】:

  • 看到您对我的一篇帖子的评论。抱歉,没有。我对 Steam 身份验证知之甚少,无法提供帮助。
  • @BobSnyder 好的,感谢您至少光临 :D
  • 为什么投反对票?如有必要我愿意编辑我的问题,但如果没有解释我无法很好地编辑它
  • 我真的很讨厌人们只是在没有任何解释的情况下投反对票。你的问题和现在一样好,所以我投了赞成票。
  • 如果您仍然有这个问题,您可以加入 google 小组并请他们详细说明(发布内容时他们会收到电子邮件),或者您也可以在 slack 上提问firebase.community

标签: javascript node.js firebase firebase-authentication steam


【解决方案1】:

您的做法是正确的,正如another question 中也提到的那样,“Firebase 支持使用任何提供商登录,只要您愿意为其编写代码。”。对于有兴趣实施 Steam 身份验证的任何人,该问题还为文档提供了 link 以执行此操作。解释一下,firebase 支持某些开箱即用的身份验证提供程序,当它不支持身份验证提供程序时,您需要编写自己的身份验证代码,这是一个生成身份验证令牌的过程。链接的文章解释了您应该如何生成令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-29
    • 2019-03-25
    • 2013-09-11
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多