从 Firebase VerifyToken 获取用户显示名称(第 2 部分)
Get User Display Name from Firebase VerifyToken (part2)
我的情况和另一个post相同的标题一样。我有一个自定义后端 (node+express),我可以在前端更新 displayName。但是,在后端查看 DecodedIdToken 时,注册用户时没有“名称”。我需要用户的显示名称,以便它可以与后端的其他客户端同步。
如果我注销新注册的用户并重新登录,DecodedIdToken 现在会在后端显示“名称”。
客户端代码:
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(dataBeforeEmail => {
firebase.auth().onAuthStateChanged(function(user) {
user.sendEmailVerification();
user.updateProfile({displayName: displayName})
});
})
.then(dataAfterEmail => {
firebase.auth().onAuthStateChanged(async function(user) {
if (user) {
// Sign up successful
dispatch({
type: REGISTER_SUCCESS,
payload:user
});
const header = await tokenConfig();
try{
axios
.post('/api/auth/',{}, header)
.then(res=>
dispatch({
type: REGISTER_SUCCESS,
payload: res.data
})
(console.log(res.data))
)
}
catch(err) {
dispatch({
type: REGISTER_FAIL,
payload:
"Something went wrong, we couldn't create your account. Please try again."
});
};
export const tokenConfig = async () => {
const user = firebase.auth().currentUser;
const token = user && (await user.getIdToken());
const config = {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
};
return config;
};
有没有办法在用户注销并重新登录的情况下显示它?
这是因为客户端 SDK 处理 ID 令牌的方式。 ID 令牌最多缓存一个小时。因此,在对用户帐户的任何更改反映在 ID 令牌上之前,您必须执行以下操作之一:
- 等待当前ID令牌过期,SDK自动获取新令牌。
- 注销和登录,循环出 ID 令牌。
- 在客户端 SDK 上明确请求 ID 令牌刷新。如果您使用的是 JS SDK,它将看起来像这样:
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true)
更多详情:
我的情况和另一个post相同的标题一样。我有一个自定义后端 (node+express),我可以在前端更新 displayName。但是,在后端查看 DecodedIdToken 时,注册用户时没有“名称”。我需要用户的显示名称,以便它可以与后端的其他客户端同步。
如果我注销新注册的用户并重新登录,DecodedIdToken 现在会在后端显示“名称”。
客户端代码:
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(dataBeforeEmail => {
firebase.auth().onAuthStateChanged(function(user) {
user.sendEmailVerification();
user.updateProfile({displayName: displayName})
});
})
.then(dataAfterEmail => {
firebase.auth().onAuthStateChanged(async function(user) {
if (user) {
// Sign up successful
dispatch({
type: REGISTER_SUCCESS,
payload:user
});
const header = await tokenConfig();
try{
axios
.post('/api/auth/',{}, header)
.then(res=>
dispatch({
type: REGISTER_SUCCESS,
payload: res.data
})
(console.log(res.data))
)
}
catch(err) {
dispatch({
type: REGISTER_FAIL,
payload:
"Something went wrong, we couldn't create your account. Please try again."
});
};
export const tokenConfig = async () => {
const user = firebase.auth().currentUser;
const token = user && (await user.getIdToken());
const config = {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
};
return config;
};
有没有办法在用户注销并重新登录的情况下显示它?
这是因为客户端 SDK 处理 ID 令牌的方式。 ID 令牌最多缓存一个小时。因此,在对用户帐户的任何更改反映在 ID 令牌上之前,您必须执行以下操作之一:
- 等待当前ID令牌过期,SDK自动获取新令牌。
- 注销和登录,循环出 ID 令牌。
- 在客户端 SDK 上明确请求 ID 令牌刷新。如果您使用的是 JS SDK,它将看起来像这样:
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true)
更多详情: