如果管理员在Firebase控制台中创建了用户帐户,则在此用户登录后,是否可以检索用户的“已创建”日期?
感谢。
P.S对Firebase进行大投票,以编程方式为用户管理添加更多管理控制。
答案 0 :(得分:8)
目前AFAIK,只能通过Admin Node.js SDK获取创建日期:
admin.auth().getUser(uid)
.then(function(userRecord) {
console.log("Creation time:", userRecord.metadata.creationTime);
});
文档:https://firebase.google.com/docs/reference/admin/node/admin.auth.UserMetadata#creationTime
答案 1 :(得分:3)
现在,如果您尝试在服务器端应用程序上获取信息,则可以通过以下方式实现。
admin.auth().getUser(uid).then(user => {
console.log(user.metadata.creationTime);
});
尽管您可以在firebase Auth控制台上看到此信息,但您无法在应用程序端检索此数据,如documentation所示。
如果您想在您的应用程序中使用此数据,您需要将其存储在数据库中,如databaseRoot/user/userUid/createdAt
。因此,请确保在创建新用户时创建此节点,例如在this question中。
答案 2 :(得分:1)
此功能将遍历所有用户,并在users/$uid/company
位置
const iterateAllUsers = function () {
const prom = db.ref('/users').once('value').then(
(snap) => {
const promArray = [];
const users = snap.val();
Object.keys(users).forEach((user) => {
promArray.push(getUIDCreationDate(user));
});
return Promise.all(promArray);
});
return prom;
}
const getUIDCreationDate = function (uid) {
const prom = fb.getUser(uid)
.then(function (userRecord) {
const prom2 = db.ref(`/users/${uid}/company`).update({ creationDate: userRecord.metadata.createdAt }).then((success) => console.log(success)).catch((error) => console.log(error));
return prom2;
}).catch(
error => {
console.log(JSON.stringify(error))
});
return prom;
}
答案 3 :(得分:0)
有一种获取方法... 当您获得firebase.User时-通常来自某些代码,例如:
this.afAuth.auth.signInWithPopup(new firebase.auth.FacebookAuthProvider()).then(
(userCredential) => {//do something with user - notice that this is a user credential.
});
无论如何,在此userCredential中有该用户 如果可以的话
let myObj = JSON.parse(JSON.stringify(userCredential.user);
您将看到可以访问createdAt字段
myObj.createdAt // somenumber = time in miliseconds since 1970
所以要访问它
let myDate: Date = new Date();
myDate.setTime(+myObj.createdAt); //the + is important, to make sure it converts to number
console.log("CREATED AT = " + myDate.toString() );
VOILA!
答案 4 :(得分:0)
在撰写本文时,Angularfire2的发布候选版本为5。使用Javascript API,可以同时检索currently authenticated user的创建日期和最后登录日期。
示例:
this.afAuth.auth.onAuthStateChanged(user => {
const createdAt = user.metadata.creationTime
const lastLogin = user.metadata.lastSignInTime
const a = user.metadata['a'] // <- Typescript does not allow '.' operator
const b = user.metadata['b'] // <- Typescript does not allow '.' operator
console.log(`${ user.email } was created ${ createdAt } (${ a }).`)
console.log(`${ user.email } last logged in ${ lastLogin } (${ b }).`)
})
尽管a
和b
未列出为正式属性,但它们分别为创建日期和最后登录日期生成了Date
对象,而creationTime
和{{1} }与GMT字符串值相同。
答案 5 :(得分:0)
在 Firebase客户端Web API 上,您可以通过以下方式获取用户的帐户创建日期:
var user = firebase.auth().currentUser;
var signupDate = new Date(user.metadata.creationTime);
链接到无用的documentation。
答案 6 :(得分:0)
截至 2021 年 8 月,console.dir(user) 给出:
{
"uid": "2Sf.......PH2",
"anonymous": true,
"isAnonymous": true,
"providers": [],
"photoURL": null,
"email": null,
"emailVerified": false,
"displayName": null,
"phoneNumber": null,
"refreshToken": "ACz.......7tgTs",
"metadata": {
"creationTimestamp": "2020-07-08T18:32:09.701Z",
"lastSignInTimestamp": "2020-07-08T18:32:09.701Z"
}
}
因此,user.metadata.creationTimestamp
将给出创建日期。