node.js - 如何使用 LinkedIn REST API 清除会话或注销
问题描述
我目前正在编写一个程序,其中需要通过 LinkedIn REST API 对多个帐户进行身份验证。这需要以相当快的速度连续完成,因为由于 LinkedIn 的令牌寿命相当短,必须一次重新连接多个帐户是很常见的。
问题是,在对单个帐户进行身份验证后,我必须等待约 10 分钟让会话到期,然后才能对新用户进行身份验证。当调用 API (liLogin) 时,它会自动将用户作为现有会话的一部分登录。
我相信这是 API 的一个有意功能,正如您在授权代码流文档的第 5 步中提到的那样。
其他需要注意的事项。我尝试在另一个线程中提到的回调 URL 上添加一个随机字符串作为查询。我还注意到 Android SDK 具有注销功能,但似乎无法在 REST API 中找到任何相关内容。
我已经在下面粘贴了我的代码部分来处理这个问题,以防万一这有帮助。
// Login
const liLogin = async (req, res) => {
const URL = `https://www.linkedin.com/oauth/v2/authorization?client_id=${config.li.id}&redirect_uri=${config.li.redirectUri}&response_type=code&state=PostSchedulerCapture321&scope=r_liteprofile%20r_emailaddress%20w_member_social`;
res.redirect(URL);
};
// Exchange temp token for access_token
const liGetUser = (req, res) => {
let token = req.query.code;
axios.get(`https://www.linkedin.com/oauth/v2/accessToken`, {
params: {
"grant_type": "authorization_code",
"code": token,
"redirect_uri": config.li.redirectUri,
"client_id": config.li.id,
"client_secret": config.li.secret
}
})
.then(result => {
return result.data.access_token;
})
.then(access_token => {
axios.get('https://api.linkedin.com/v2/me', {
'headers': {
'Authorization': `Bearer ${access_token}`
}
})
.then(result => {
res.send(result.data)
})
.catch(err => {
console.log(err);
})
})
.catch(err => {
err = {...err.config.headers, ...err.response.data};
console.log(err);
})
}
解决方案
如果有人遇到这种情况,您只需将浏览器重定向到注销 URL ( https://linkedin.com/m/logout ),然后在几秒钟后使用 setTimeout 关闭窗口。
不是一个理想的解决方案,但它有效。
推荐阅读
- dart - 如何在 Dart 的常量类中使用枚举作为装饰器?
- ios - Health Kit 数据详情
- html - 用户在选择地址之前不能付款
- html - 如何将变量从 main.go 文件调用到 html 文件?
- reactjs - React & RTK:如何从中间件调度?
- synchronization - 让 unison-gtk2 在 mac 上运行的问题
- python-3.x - Python - 使用累加器减少的 PyDash 示例
- python - 如何根据另一列中的信息获取列的最大值?
- algorithm - 打印约瑟夫序列是如何工作的?
- java - RedisTemplate nullPointException