firebase 我的代码可以确定当前用户帐户的创建日期吗?

vaj7vani  于 2023-04-22  发布在  其他
关注(0)|答案(7)|浏览(449)

如果管理员在Firebase控制台中创建了用户帐户,在此用户登录后,是否可以检索用户的“创建”日期?
PS Big投票支持Firebase以编程方式添加更多管理控件,用于用户管理。

vptzau2j

vptzau2j1#

目前,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/firebase-admin.auth.usermetadata.md#usermetadatacreationtime

pkbketx9

pkbketx92#

Firebase客户端web API上,您可以通过以下方式获取用户的账号创建日期:

var user = firebase.auth().currentUser;
var signupDate = new Date(user.metadata.creationTime);

链接到无用的documentation

hl0ma9xz

hl0ma9xz3#

管理后台SDK

如果您试图在服务器端应用程序上获取信息,现在可以通过以下方式实现。

admin.auth().getUser(uid).then(user => {
    console.log(user.metadata.creationTime);
});

客户端应用

尽管你可以在firebase Auth控制台上看到这些信息,但你不能在应用程序端检索这些数据,就像你在documentation中看到的那样。
如果你想在你的应用程序中使用这些数据,你需要将它存储在你的数据库中,比如databaseRoot/user/userUid/createdAt

b4lqfgs4

b4lqfgs44#

在撰写本文时,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 }).`)
})

虽然没有作为正式属性列出,但ab分别为创建日期和最后登录日期生成Date对象,而creationTimelastSignInTime与GMT字符串值相同。

gt0wga4j

gt0wga4j5#

此函数将遍历所有用户,并在users/$uid/company位置下记录creationDate

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;
}
0mkxixxg

0mkxixxg6#

有一种方法可以得到它...当你得到一个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() );

瞧!

8yoxcaq7

8yoxcaq77#

截至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将给予创建日期。

相关问题