我觉得问这个很愚蠢,但我还是要问
im 仍然是 Firebase 中的新手,现在尝试使用登录自定义令牌以管理员身份编辑我的用户数据 这是我的 Firebase 数据库实时规则
{
"rules": {
".read": "auth != null",
"users": {
"$user_id": {
".read": true,
".write": "$user_id == auth.uid"
}
}
}
}
这是我的客户端(?(代码,我使用ajax将用户名和密码发送到CI控制器,然后控制器将从那里将值发送到nodejs
$.ajax({
type: "POST",
url: "Umum/senddata/"+user+"/"+pass
}).done(function( msg ) {
firebase.auth().signInWithCustomToken(msg).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
if (errorCode === 'auth/invalid-custom-token') {
alert('The token you provided is not valid.');
} else {
console.error(error);
}
});
})
});
首先,我需要检查 Firebase 中是否存在用户名,然后我将获取 UID 来创建自定义令牌,然后将自定义令牌发送回客户端
app.post('/sendata', function(req, res) {
var content = req.body;
admin.database().ref('/admins').orderByChild('username').equalTo(content.username).once('value').then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
admin.auth().createCustomToken(childSnapshot.val().adminuid).then(function(customToken) {
console.log("customtoken : " + customToken);
//to-do: forward the message to the connected nodes.
res.end(customToken);
admin.auth().verifyIdToken(customToken).then(function(decodedToken) {
var uid = decodedToken.uid;
console.log("uidnya : " + uid);
// ...
}).catch(function(error) {
// Handle error
});
}).catch(function(error) {
console.log("Error creating custom token:", error);
});
});
});
});
现在的问题是,人们说令牌将在1小时内过期。 他们所说的过期是什么意思?过期后,他们无法编辑用户数据还是什么? 因为我的仍然有效,所以即使在 1 小时没有重新登录的情况下,我仍然能够编辑我的用户数据。 或者也许我的登录与自定义令牌是错误的? 但是我尝试控制台.log它返回了我用于登录的正确用户 如果令牌过期会发生什么?
您将自定义令牌与 ID 令牌混淆了。
您返回给客户端的自定义令牌将在一小时后过期。通常这很好,因为您只需要使用它一次signInWithCustomToken
.这将在客户端登录用户。作为交换,Firebase ID 令牌和刷新令牌将由 Firebase 身份验证服务器返回并存储在客户端上(Firebase ID 令牌用于检查用户是否经过身份验证并访问 Firebase 实时数据库/Firestore/等内容(。这就是你所说的verifyIdToken
。Firebase ID 令牌将在一小时后过期,但 Firebase 刷新令牌将允许客户端在过期时刷新该 ID 令牌。