我在客户端运行以下代码来访问数据库中用户的属性。
firebaseAUTH.signInWithEmailAndPassword(email, password).then(function (user) {
console.log('user has signed in with e-mail address: '+user.email+' and user ID: '+user.uid)
firebaseAUTH.currentUser.getToken(true).then(function(idToken) {
$.ajax(
{
// Send token to your backend via HTTPS (JWT)
url: '/auth',
type: 'POST',
data: {token: idToken},
success: function (response){
var userID = response.userID
firebase.database().ref('/users/' + userID).once('value').then(function(snapshot) {
var industry = snapshot.val().industry
var company = snapshot.val().company
var firstname = snapshot.val().firstname
var email = snapshot.val().email
var source = snapshot.val().source
var phone = snapshot.val().phone
var password = snapshot.val().password
var lastname = snapshot.val().lastname
$.get(
{
url: '/members-area/'+userID,
data: {userID: userID,
industry: industry,
email: email},
success: function(response){
window.location = '/members-area/'+userID
}
})
我的服务器端代码:
app.get('/members-area/:userID', function(req,res,next) {
res.render('members-area', { userID: req.params.userID, industry: req.params.industry, email: req.params.email})
})
但是,当我尝试访问pug中的'industry'变量时,它显示未定义。正如您所看到的,我在GET ajax调用中将其发送到上面,那么问题是什么?这也很奇怪,因为我在函数快照之后登录到控制台变量names'right它们就在那里。此外,神秘的'userID'显示为内容变量,但'行业'和'电子邮件'根本不存在。
答案 0 :(得分:2)
我不太清楚你要做什么,但希望我可以帮助你。
首先,您不需要第二次调用来获取令牌。当您调用signInWithEmailAndPassword时,firebase将返回该用户。所以你可以马上调用getToken
firebaseAUTH.signInWithEmailAndPassword(email, password).then(function (user) {
console.log('user has signed in with e-mail address: '+user.email+' and user ID: '+user.uid)
console.log('we also got the token: ' + user.getToken());
...
您似乎也在发布未定义的路由,然后使用get查询不同的路由。
另外,神秘的'userID'显示为内容的var但是 “行业”和“电子邮件”根本不存在。
在服务器端代码中,您的路由仅使用一个参数定义:userID。这条线
app.get('/members-area/:userID', function(req,res,next)
将userID定义为参数,而不是其他2个变量。所以它们是未定义的。
我认为你要做的是:
firebaseAUTH.signInWithEmailAndPassword(email, password).then(function (user) {
const userId = user.getToken();
firebase.database().ref('/users/' + userID).once('value').then(function(snapshot) {
$.post('/members-area/' + userId, snapshot.val(), function(data, status) {
console.log(data);
console.log(status);
});
});
然后在您的服务器代码中:
app.post('/members-area/:userID', function(req,res,next) {
const theSnapshot = req.body;
res.send(theSnapshot)
});
我仍然不明白为什么你想要使用数据库中的客户端代码来检索信息,然后只发布一个服务器来再次获取它。但也许我误解了一些事情:)
看到发送数据的get请求也很奇怪,我很确定它违反了规范。您通常希望使用post发送数据,然后使用get to ehm获取数据:)