[英]Understanding how firebase handles signing In with JWT
我在 ExpressJS 应用程序中使用 firebase 实现 JWT 身份验证,其中 JWT 由 firebase 本身生成
在登录.html
<form method="POST" class="register-form" id="login-form">
<div class="form-group">
<label><i class="zmdi zmdi-account material-icons-name"></i></label>
<input type="text" name="email" id="email" placeholder="Email" required/>
</div>
<div class="form-group">
<label><i class="zmdi zmdi-lock"></i></label>
<input type="password" name="password" id="password" placeholder="Password" required/>
</div>
<div class="form-group">
<input type="checkbox" name="remember-me" id="remember-me" class="agree-term" />
<label for="remember-me" class="label-agree-term"><span><span></span></span>Remember me</label>
</div>
<div class="form-group form-button">
<input type="submit" name="signin" id="signin" class="form-submit" value="Log in"/>
</div>
<script>
// afterinitialzing firebase app
document
.getElementById("login-form")
.addEventListener("submit", (event) => {
event.preventDefault();
const login = event.target.email.value;
const password = event.target.password.value;
const getToken = () => {
console.log(login, password);
return fetch(
'/getToken',
{
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: login,
password: password
})
}
)
}
getToken();
</script>
根据firebase 生成自定义令牌,我必须创建一条路径,在其中验证用户密码和 email 并获取uid
并生成令牌作为
app.post('/getToken', (req, res) => {
const email = req.body.email
const password = req.body.password
admin
.auth()
.getUserByEmail(email)
.then((userRecord) => {
const uid = userRecord.uid;
admin
.auth()
.createCustomToken(uid)
.then((customToken) => {
res.json({ token: customToken });
})
.catch((error) => {
console.log('Error creating custom token:', error);
});
})
.catch((error) => {
console.log('Error fetching user data:', error);
});
})
然后通过这种方式完成签名
const getToken = () => {
console.log(login, password);
return fetch(
'/getToken',
{
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: login,
password: password
})
}
).then((responseData) => {
firebase.auth().signInWithCustomToken(token)
.then((userCredential) => {
// Signed in
var user = userCredential.user;
// ...
})
.catch((error) => {
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
})
}
getToken();
我希望这是需要做的。 我意识到在整个过程中我没有验证用户在任何地方输入的密码。 我对 jwt 的工作原理知之甚少,但我想了解如何验证上面链接的文档中所述的用户密码
当您在服务器端代码中为用户生成自定义令牌时,您有责任检查用户的凭据是否有效。 当您拥有要与 Firebase 集成的现有用户凭据目录时,通常会创建自定义令牌。
虽然可以根据该用户的 Firebase 身份验证中存储的数据检查输入的凭据,但在创建自定义令牌时,它非常复杂并且将凭据存储在 Firebase 身份验证中毫无意义。 我有一种感觉,我们正在处理一个XY 问题。
你为什么不使用 Firebase 身份验证客户端 JavaScript SDK ? 对于这种情况,这将变得更加容易和惯用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.