我刚刚实现了Twitter登录到Firebase Web应用程序。用户成功登录后,我想查看用户的Twitter ID(以在用户之间启用基于Twitter的通信)。
根据文档(https://firebase.google.com/docs/auth/web/manage-users),提供者特定的信息位于用户信息的providerData下。
在providerData下,我看到以下内容
displayName: "Satoshi Nakajima" (as I expected)
email: null (as I expected)
phoneNumber: null (as I expected)
photoURL: "https://abs.twimg.com/..." (as I expected)
providerId: "twitter.com" (of course)
uid: "1129128..." (what is this?)
uid似乎是一个唯一的ID,但它与我们通常使用的Twitter ID不同,例如@snakajime(属于我的)。
我想知道为什么我在这里看不到Twitter ID。我想念什么吗?是否有任何API可以从这个奇怪的uid获取Twitter ID?
答案 0 :(得分:2)
据我所知,您正在寻找的屏幕名称并未包含在Firebase通过Twitter提供的Twitter OAuth中,但是您找到的uid
确实是用户的Twitter用户ID。
使用该ID,您可以通过将其传递给Twitter API users/show endpoint来使用Twitter API来获取有关用户的详细信息。由于您计划提供基于Twitter的通信,因此您可能仍然需要使用此API。
例如:
GET https://api.twitter.com/1.1/users/show.json?user_id={the_uid_from_provider_data}
RESPONSE:
{
"id": {the_uid_from_provider_data},
"id_str": "{the_uid_from_provider_data}",
"name": "Snakajime",
"screen_name": "snakajime", // <--- Here is the screen name you are looking for
...
}
答案 1 :(得分:2)
实际上,您可以在登录后立即通过AdditionalUserInfo获取它。
以下是网络API的示例:
firebase.auth().signInWithPopup(new firebase.auth.TwitterAuthProvider())
.then((userCredential) => {
// Get the Twitter screen name.
console.log(userCredential.additionalUserInfo.username);
})
.catch((error) => {
// An error occurred.
});