【问题标题】:How to get the user name by using firebase verifyToken()?如何使用 firebase verifyToken() 获取用户名?
【发布时间】:2021-08-03 15:01:31
【问题描述】:

Auth Middleware - 我正在执行 verifyIdToken()

const admin = require("../firebase");

const authCheck = async(req, res, next) => {
    try{
        const firebaseUser = await admin.auth().verifyIdToken(req.headers.authtoken);
        console.log("FIREBASE USER => ", firebaseUser);
        req.user = firebaseUser;
        next();
    }
    catch(e){
        console.log(e);
        res.status(422).send({error: e.message});
    }
}

这是我使用 firebase verifyToken() 从 firebase 得到的响应。我没有得到名称属性。谁能告诉我如何获取用户名?

FIREBASE USER =>  {
  iss: 'https://securetoken.google.com/ecommerce-36c49',
  aud: 'ecommerce-36c49',
  auth_time: 1628002053,
  user_id: '80oOozlXZOVZTLhKAhTMY04YJHC2',
  sub: '80oOozlXZOVZTLhKAhTMY04YJHC2',
  iat: 1628002053,
  exp: 1628005653,
  email: 'robodroid2001@gmail.com',
  email_verified: true,
  firebase: { identities: { email: [Array] }, sign_in_provider: 'password' },
  uid: '80oOozlXZOVZTLhKAhTMY04YJHC2'
}

更新

const admin = require("../firebase");

const authCheck = async(req, res, next) => {
    console.log(req.headers.authtoken);
    try{
        const firebaseUser = await admin.auth().verifyIdToken(req.headers.authtoken);
        console.log("FIREBASE USER => ", firebaseUser);
        req.user = firebaseUser;
        **const response = await admin.auth().getUser(firebaseUser.uid);
        console.log("response: ", response);**
        next();
    }
    catch(e){
        console.log(e);
        res.status(422).send({error: e.message});
    }
}

module.exports = authCheck;

这是我在执行 getUser(uid) 后得到的响应。但仍然没有得到名字。它显示名称:未定义。

response : UserRecord {
  uid: '80oOozlXZOVZTLhKAhTMY04YJHC2',
  email: 'robodroid2001@gmail.com',
  emailVerified: true,
  displayName: undefined,
  photoURL: undefined,
  phoneNumber: undefined,
  disabled: false,
  metadata: UserMetadata {
    creationTime: 'Tue, 03 Aug 2021 14:46:50 GMT',
    lastSignInTime: 'Tue, 03 Aug 2021 17:28:43 GMT',
    lastRefreshTime: 'Tue, 03 Aug 2021 17:28:43 GMT'
  },
  providerData: [
    UserInfo {
      uid: 'robodroid2001@gmail.com',
      displayName: undefined,
      email: 'robodroid2001@gmail.com',
      photoURL: undefined,
      providerId: 'password',
      phoneNumber: undefined
    }
  ],
  passwordHash: undefined,
  passwordSalt: undefined,
  tokensValidAfterTime: 'Tue, 03 Aug 2021 14:46:51 GMT',
  tenantId: undefined
}

【问题讨论】:

    标签: node.js


    【解决方案1】:

    在验证令牌后获得uid 后,您可以调用admin.auth().getUser(uid),这将返回包括displayName 在内的完整用户记录。但这只有在创建用户时或之后更新了 displayName 字段时才有效。

    【讨论】:

    • const response = await admin.auth().getUser(firebaseUser.uid);控制台日志(响应);当我这样做时 - >我仍然没有得到名字。查看更新的代码。
    • 告诉我一件事。即使我们没有传递任何名称,我们如何获取用户名。我们只需将电子邮件或密码传递给 firebase,然后我们如何获取用户名。
    • 获取用户名的方法有两种:如果使用密码提供程序,您必须在注册时要求您的用户提供一个名称,然后将其设置为displayName 用于用户记录。如果您使用第 3 方身份验证提供商(Google、FB 等)来创建新用户,该提供商通常会在 displayName 字段中提供用户名(如在他们的系统中一样)
    • 非常感谢兄弟,现在我明白你想告诉我什么了。非常感谢......现在我明白了。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2023-01-20
    • 2021-10-08
    • 1970-01-01
    相关资源
    最近更新 更多