将字符串散列为Firebase身份验证密码

时间:2019-07-29 14:20:17

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

我正在尝试使用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。这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以在Node.js服务器环境中(从Cloud Function内)使用客户端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.
  });