繁体   English   中英

使用 nodejs 使用 Steam 登录登录网站

[英]Login into a website with steam login using nodejs

我正在尝试登录一个像本示例 csgolounge 这样的网站,它需要使用 nodejs 进行 Steam 登录身份验证。

甚至认为我已经尝试了一些东西,但它们都没有接近工作,所以我在这里包含代码没有意义。

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

编辑:我认为我的问题写错了,因为我希望节点应用程序使用 Steam 登录到 csgolounge,并且没有一个“像”带有登录选项的 csgolounge 的网站。

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

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

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

如果您打算使用 Node.JS,我建议您查看node-jsonwebtokenpassport-openidconnect 如果您选择使用护照,那么有人已经制定了包含 Steam 的“策略”。 看看这里

我有同样的问题,我不知道它是否对你有帮助,但我写了一些方法来获取用户 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 登录(您也可以在 in 中使用)

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 传递登录后要重定向的位置。 如果登录成功,您将被重定向到您的 url,并且 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} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM