我目前正在编写一个程序,其中需要通过LinkedIn REST API验证多个帐户。由于LinkedIn的令牌寿命很短,因此必须一次重新连接多个帐户非常普遍,因此需要快速连续进行。
问题是,在对单个帐户进行身份验证之后,我必须等待约10分钟以使会话过期,然后再对新用户进行身份验证。调用API(liLogin)时,它将自动将用户登录为现有会话的一部分。
我相信这是API的故意功能,您可以在The Authorization Code Flow Documentation的第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关闭窗口。