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

时间:2016-06-21 19:08:57

标签: firebase firebase-realtime-database firebase-authentication

如果管理员在Firebase控制台中创建了用户帐户,则在此用户登录后,是否可以检索用户的“已创建”日期?

感谢。

P.S对Firebase进行大投票,以编程方式为用户管理添加更多管理控制。

7 个答案:

答案 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)

管理员后端SDK

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

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位置

下记录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;
}

答案 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 }).`)
})

尽管ab未列出为正式属性,但它们分别为创建日期和最后登录日期生成了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 将给出创建日期。