我正在尝试登录网站,例如csgolounge,这需要使用nodejs进行Steam登录验证。
即使我已经尝试了一些事情,但是他们都没有接近工作,所以我没有必要在这里包括代码。
我想知道是否有办法做到这一点。
编辑:我认为我错误地写了我的问题,因为我希望节点应用程序使用steam登录到csgolounge,并且没有一个网站与登录选项'喜欢'csgolounge。答案 0 :(得分:2)
回答你的问题,是的。有一种方法可以做到这一点。
您需要做的第一件事是获取一个蒸汽API密钥,您可以通过here进行操作。然后蒸汽说:
只需为您选择的语言和平台下载OpenID库,并使用http://steamcommunity.com/openid作为提供程序。返回的声明ID将包含用户的64位SteamID。声明的ID格式为:http://steamcommunity.com/openid/id/
如果您已开始使用Node.JS,我建议您查看node-jsonwebtoken或passport-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)