【问题标题】:Hashing a string as Firebase Auth password将字符串散列为 Firebase 身份验证密码
【发布时间】:2019-07-29 14:20:17
【问题描述】:

我正在尝试使用 Firebase Cloud Functions 创建用户登录,但 admin.auth() 没有任何登录方法。所以我决定散列输入密码并检查它是否与该用户帐户的密码相同。当你这样做时:

exports.loginWithEmailAndPassword = functions.https.onRequest((req, res) => {
    admin.auth().getUserByEmail(req.query.email)
    .then((userRecord) => {
        const user = userRecord.toJSON();
        res.send(userRecord.toJSON())
    })
    .catch((error) => {
        res.status(400).send(error);
    })
})

输入用户电子邮件时的服务器响应是这样的:

{
    uid: [USER UID],
    email: [USER EMAIL],
    emailVerified: false,
    disabled: false,
    metadata: {
        lastSignInTime: "Tue, 16 Jul 2019 15:05:14 GMT",
        creationTime:"Tue, 16 Jul 2019 15:04:28 GMT"
    },
    passwordHash: "UkVEQlNURUQ=",
    tokensValidAfterTime: "Tue, 16 Jul 2019 15:04:28 GMT",
    providerData: [
        {
            uid: [USER EMAIL],
            email: [USER EMAIL]
            providerId: "password"
        }]
    }
}

认为 passwordHash 是经过哈希处理的密码字符串,所以登录时我将哈希输入字符串(密码)并检查经过哈希处理的输入是否等于passwordHash。这可能吗?

【问题讨论】:

    标签: node.js firebase hash firebase-authentication google-cloud-functions


    【解决方案1】:

    您可以在 Node.js 服务器环境(从云函数中)使用客户端 SDK 来登录用户,就像您在浏览器客户端登录一样。

    import firebase from '@firebase/app';
    import '@firebase/auth';
    
    firebase.initializeApp({
      apiKey,
    });
    
    firebase.auth().signInWithEmailAndPassword(req.query.email, req.query.password)
      .then((userCredential) => {
        // User successfully signed in.
      })
      .catch((error) => {
        // Error signing in.
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2021-04-29
      • 2023-01-21
      • 1970-01-01
      • 2014-12-29
      相关资源
      最近更新 更多