2017-10-13 4 views
0

Ich eine Frage über Anfrage und Antwort in expressJS. Ich meine Fall in einer Anfrage ich Anfrage an den Server und ich bekomme Bearer Schlüssel in JSON, aber dieser Schlüssel ist in jeder Sitzung anders. Und ich habe eine zweite Anfrage, wenn ich Bestellung erstelle, aber ich brauche diesen Inhaberschlüssel, um die Transaktion zu autorisieren. Und meine Frage ist poosible Daten von einer Anfrage an eine andere senden? Träger Nummer muss ich in 'Authorization' Feld einfügen. Bitte schau auf meinen Code.JSON-Antwort von einer Anfrage an eine andere senden

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

Normalerweise ... senden Sie das Token an den Client in Ihrer ersten Anfrage, dann muss der Client dieses Token selbst auf den Header "Authorization" hinzufügen und es bei jeder Anfrage senden. Sie müssen es nicht von einer Anfrage an eine andere übergeben Überprüfen Sie in diesem Diagramm von http://jwt.io: https://cdn.auth0.com/content/jwt/jwt-diagram.png – mJehanno

+0

ok, vielen Dank für die Hilfe –

Antwort

0

Was Sie in der Regel zuerst Ihr Token erstellen kann, der an den Client zurück geht. Client hat jetzt ein Token. In der Regel ist dies verschlüsselt und enthält Informationen wie Benutzername, ID, spezielle "Rollen", Ablaufzeit usw.

Sie haben dann dieses Token an den Berechtigungsheader bei jeder nachfolgenden Anfrage angehängt.

Basierend auf der Syntax Ihres Codes, nehme ich an, dass Sie express.js verwenden. Bitte korrigieren Sie mich, wenn ich hier falsch liege. Jedenfalls verwendet es ein Konzept, das als "Middlewares" bekannt ist. Im Wesentlichen können Sie andere Javascript-Funktionen ausführen, bevor Sie die Antwort zurücksenden ... Sie möchten etwas ähnliches. Wissen Sie, dass ich diesen Code aus nicht wirklich testen haben, so dass es wahrscheinlich nicht funktionieren würde, aber es Punkte, die Sie in die richtige Richtung hoffentlich:

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

Beachten Sie die Verwendung der decodeToken Funktion als Middleware, und wie es ruft next() auf. Ich empfehle Ihnen, die Express-Middleware oder die von Ihnen verwendete Bibliothek zu Rate zu ziehen, um Situationen wie diese zu behandeln.

Auch eine Nebenbemerkung ... du schleichst in Richtung etwas, das "Rückruf-Hölle" genannt wird, basierend auf deinem Code, den du gepostet hast. Obwohl es nichts mit Ihrer Frage zu tun hat, würde ich Sie ermutigen, Google "Call Back Hell" zu googlen, um zu sehen, warum es schlecht ist und was Sie tun können, um sich selbst beizubringen, es nicht zu benutzen. :) Glückliche Codierung!

Verwandte Themen