我正在尝试使用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
。这可能吗?
答案 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.
});