使用 nodejs 通过蒸汽登录登录网站

Login into a website with steam login using nodejs

本文关键字:登录 网站 nodejs 使用      更新时间:2023-09-26

我正在尝试登录一个网站,例如以下示例csgolounge,它需要使用nodejs进行蒸汽登录身份验证。

甚至认为我已经尝试了一些事情,它们都没有接近工作,所以我没有必要在这里包含代码。

我想知道是否有任何方法可以做到这一点。

编辑:我想我的问题写错了,因为我希望节点应用程序使用 steam 登录到 csgolounge,而不是有一个带有登录选项的"像"csgolounge 的网站。

回答你的问题,是的。有一种方法可以做到这一点。

您需要做的第一件事是获取一个 steam api 密钥,您可以通过前往此处来完成。然后正如蒸汽所说:

只需下载适用于您选择的语言和平台的 OpenID 库,并使用 http://steamcommunity.com/openid 作为提供商。返回的声明 ID 将包含用户的 64 位 SteamID。声明的 ID 格式为:http://steamcommunity.com/openid/id/

如果您打算使用 Node.JS我建议您查看 node-jsonwebtoken 或 passport-openidconnect。如果您选择使用护照,那么已经有人制定了包括蒸汽在内的"策略"。在这里查看。

我有同样的问题,我不知道它是否对您有帮助,但是我编写了一些方法来获取用户steamID,然后您可以使用此方法使用它来获取用户信息。我这样做只是知道如何用 PHP 做到这一点 - 这就是为什么我想在 js 上重写它。

1)建立链接的方法

const http_build_query = (obj) => {
    let str = ""
    for (const key in obj) {
        const value = obj[key];
        str += `${key}=${value}&`;
    }
    return str;
}

2)返回链接的方法,您应该去Steam登录(您也可以在)

const genUrl = (urlToReturnTo) => {
    const params = {
        'openid.ns'         : 'http://specs.openid.net/auth/2.0',
        'openid.mode'       : 'checkid_setup',
        'openid.return_to'  :  urlToReturnTo,
        'openid.realm'      : 'http://localhost:8080',
        'openid.identity'   : 'http://specs.openid.net/auth/2.0/identifier_select',
        'openid.claimed_id' : 'http://specs.openid.net/auth/2.0/identifier_select',
    };
    const url = `${STEAM_LOGIN}?${http_build_query(params)}`
    return url;
};

同样在方法 genUrl 中,您需要作为参数 url 传递,您希望在登录后重定向到其中。如果登录成功,您将被重定向到您的网址,并在网址中有一些参数,它看起来像"http://yoururl?here_is_params"你需要从我使用的 URL 中获取一些 [here_is_params] 的方法:

const search = location.search.substring(1);
const urlObj = JSON.parse('{"' + decodeURI(search).replace(/"/g, '''"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')

所以在那之后,你将有一个带有查询参数的对象

3)现在你需要它从这个对象获取steamID:

const getUserId = (response) =>
{
    const str = response["openid.claimed_id"];
    const res = decodeURIComponent(str)
    const propsArr = res.split("'/");
    console.log(propsArr);
    return propsArr[propsArr.length-1];
}

const userId = getUserId(urlObj)

4)现在你有了userId,你需要它通过fetch或axios发送请求。它将返回一个包含用户数据的 JSON OBJ

 http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={apiKey}&steamids=${userId}