2017-10-13 5 views
0

J'ai une question sur la demande et respnse dans expressJS. J'ai mon cas dans une demande que je poste une demande au serveur et je reçois la clé de support dans JSON, mais cette clé est différente dans chaque session. Et j'ai une deuxième requête lorsque je crée une commande, mais j'ai besoin de cette clé de support pour autoriser la transaction. Et ma question est poosible envoyer des données d'une demande à l'autre? Numéro de porteur Je dois insérer au champ 'Authorization'. S'il vous plaît regardez mon code.Envoyer réponse JSON d'une demande à l'autre

router.post('/authorize', function(req, res){ 
request({ 
    method: 'POST', 
    url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
    }, 
    body: "xyz" 
}, function (error, response, body) { 
     console.log('Status:', response.statusCode); 
     console.log('Headers:', JSON.stringify(response.headers)); 
     console.log('Response:', body); 
     res.send(body); //Here I get necessary Bearer key 
    } 
)} 


router.post('/paynow', function(req, res){ 
    request({ 
method: 'GET', 
url: 'https://secure.snd.payu.com/api/v2_1/paymethods/', 
headers: { 
    'Authorization': 'Bearer number' 
}}, function (error, response, body) { 
     console.log('Status:', response.statusCode); 
     console.log('Headers:', JSON.stringify(response.headers)); 
     console.log('Response:', body); 
     res.send(body); 
} 

) }

+1

habituellement ... vous envoyez le jeton au client dans votre première requête, puis le client doit ajouter lui-même ce jeton dans l'en-tête 'Authorization' et l'envoyer à chaque requête. Vous n'avez pas à le passer d'une demande à une autre Vérifiez sur ce diagramme à partir de http://jwt.io: https://cdn.auth0.com/content/jwt/jwt-diagram.png – mJehanno

+0

ok, merci beaucoup pour l'aide –

Répondre

0

Qu'est-ce que vous généralement est de créer votre premier jeton, ce qui revient au client. Le client a maintenant un jeton. Généralement, il est codé et contient des informations telles que le nom d'utilisateur, l'identifiant, tous les "rôles" spéciaux, l'expiration, etc.

Vous avez ensuite ce jeton attaché à l'en-tête d'autorisation lors de toute demande ultérieure. En fonction de la syntaxe de votre code, je suppose que vous utilisez express.js. Corrigez-moi si je me trompe ici. Quoi qu'il en soit, il utilise un concept connu sous le nom "middlewares". Essentiellement, vous pouvez exécuter d'autres fonctions javascript avant de renvoyer la réponse ... Vous voudriez quelque chose comme ça. Sachez que je ne teste pas réellement ce code de telle sorte qu'il ne fonctionnera probablement pas, mais nous espérons qu'il vous points dans la bonne direction:

router.post('/authorize', function(req, res) { 
    request({ 
     method: 'POST', 
     url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize', 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded', 
     }, 
     body: "xyz" 
    }, function(error, response, body) { 
     console.log('Status:', response.statusCode); 
     console.log('Headers:', JSON.stringify(response.headers)); 
     console.log('Response:', body); 
     res.send(body); //Here I get necessary Bearer key 
    }); 
}); 


router.post('/paynow', decodeToken, function(req, res) { 
    // here you could now access the user information on the user property of the request. It's assumed that at this point, the token has all been validated 
    const user = req.user; 
    console.log(user); 
    res.send(`Hello, ${user.name}!`); 
}); 

const decodeToken = (req, res, next) => { 
/* do something to decode the token. Review the documentation for whichever JWT library your'e using on how to do this. It will be something like this. */ 
jwt.decode(req.header['Authorization']) 
    .then((decodedToken) => { 
     req.user = decodedToken; 

     // notice this next() function. this tells express to execute the next function in line on the router endpoint you have. 
     next(); 
    }) 
    .catch((error) => { 
     // error usually something along the lines of an expired token, token doesn't exist, invalid, etc. 
     console.log(error); 

     // we immediately send a bad response back. Thus, code would never even get into the main '/paynow' logic. 
     res.status(500).end(); 
    }); 
}); 

Notez l'utilisation de la fonction decodeToken comme middleware, et comment appelle le suivant(). Je vous encourage à consulter le middleware explicite ou la bibliothèque que vous utilisez pour gérer des situations comme celle-ci. En outre, sur une note de côté ... vous rampez vers quelque chose appelé "Call Back Hell" en fonction de votre code que vous avez posté. Même si cela n'a rien à voir avec votre question, je vous encourage à aller sur Google "rappeler l'enfer" pour voir pourquoi c'est mauvais et ce que vous pouvez faire pour vous apprendre à ne pas l'utiliser. :) Codage heureux!