使用nodejs

时间:2016-04-27 02:20:52

标签: javascript node.js steam

我正在尝试登录网站,例如csgolounge,这需要使用nodejs进行Steam登录验证。

即使我已经尝试了一些事情,但是他们都没有接近工作,所以我没有必要在这里包括代码。

我想知道是否有办法做到这一点。

编辑:我认为我错误地写了我的问题,因为我希望节点应用程序使用steam登录到csgolounge,并且没有一个网站与登录选项'喜欢'csgolounge。

2 个答案:

答案 0 :(得分:2)

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

您需要做的第一件事是获取一个蒸汽API密钥,您可以通过here进行操作。然后蒸汽说:

  

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

如果您已开始使用Node.JS,我建议您查看node-jsonwebtokenpassport-openidconnect。如果你选择使用护照,有人已经制定了一个"策略"包括蒸汽。检查出here

答案 1 :(得分:1)

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

1)建立链接的方法

const express= require('express');

const ratelimit= require('express-rate-limit');
const xss= require('xss-clean')

upload_rate_limit = ratelimit({
    windowMs: 10 * 60 * 1000,
    max: 10,
    message: "Too many places and photos added. Try again later"
}) 


// App Middlewares
app= express();
app.use(express.json({limit: '10kb'}));
app.use(express.urlencoded({extended:false}));
app.use(xss());
app.use('/upload/', upload_rate_limit);


// Custom modules

const upload = require('./upload');

const rating= require('./rating');




// Routes

app.use('/upload', upload); //Where User uploads Data
app.use('/rating', rating); //Takes User Input of Ratings

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

const http_build_query = (obj) => {
    let str = ""

    for (const key in obj) {
        const value = obj[key];
        str += `${key}=${value}&`;
    }

    return str;
}

此外,在方法genUrl中,您还需要作为参数URL传递,要在登录后将其重定向到该URL。如果登录成功,您将被重定向到您的URL,并且URL中将包含一些参数,它看起来像“ http://yoururl?here_is_params” 并且您需要从URL中获得一些[here_is_params]的用法:

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;
};

因此之后,您将拥有一个带有查询参数的对象

3)现在,您只需要从该对象获取steamID:

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

4)现在,您有了userId,您只需使用它即可通过fetch或axios发送请求。它将返回一个带有用户数据的JSON OBJ

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)