1

データベース内のユーザーのプロパティにアクセスするために、クライアント側で次のコードを実行しました。AJAX取得リクエストで送信されたデータが認識されませんか?

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})                 
}) 

しかし、それは未定義を示しています。あなたが見ることができるように、私はGET ajax呼び出しの中でそれを送信します。だから問題は何ですか?私は、関数スナップショットの後に変数names'rightをコンソールに記録していたので、それも奇妙です。また、不思議なことに 'userID'はコンテンツのあるvarとして表示されますが、 'industry'と 'email'はまったくありません。

答えて

2

あなたは何をしようとしているのかよくわかりませんが、うまくいけば助けてくれるはずです。

まず、トークンを取得するために2回目の呼び出しは必要ありません。 signInWithEmailAndPasswordを呼び出すと、firebaseはユーザを返します。だから、

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()); 
... 

あなたはまた、定義されていないルートに投稿されているように見えるし、次にあなたが得ると別のルートを照会すぐに入手トークンを呼び出すことができます。

また、不思議なことに 'userID'はコンテンツのあるvarとして表示されますが、 '業界'と 'メール'はまったくありません。

サーバーサイドコードでは、ルートはuserIDという1つのパラメータでのみ定義されます。行

app.get('/members-area/:userID', function(req,res,next) 

他の2つの変数ではなく、userIDをパラメータとして定義します。したがって、それらは未定義であることが理にかなっています。私はあなたがやろうとしていると思う何

は次のとおりです。

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); 
    }); 
}); 

そして、サーバーコードに:あなたが使用して情報をretriveする理由

app.post('/members-area/:userID', function(req,res,next) { 
    const theSnapshot = req.body; 
    res.send(theSnapshot) 
}); 

私はまだ理解していませんクライアントコードをデータベースから取得し、それを再度取得するためにサーバーにポストするだけです。しかし、多分私は何かを誤解しているかもしれません:)

それはまた非常にデータを送信する要求を見るために奇妙な、私はかなりその仕様に対して確信しています。あなたは通常、データを送信するために投稿を使用したいと思うし、ehmにデータを取得する:

+0

ありがとう!これはまさに私が必要としていたものです。 – huzal12

+0

喜んで助けてください。あなたがそれに満足していれば、それを受け入れられた答えとしてマークできますか? – Bergur

+0

投稿を使用するか、プライベート/保護されたページを取得するはずです。つまり、そのための規約はありますか?私はそれが理にかなっていると思った:新しいページを読み込む(システムから情報を取り出す)。 – huzal12

関連する問題