2017-10-13 234 views
0

我在expressJS中提出了一個關於請求和響應的問題。我在一個請求中發送請求到服務器,並在JSON中獲取承載密鑰,但是此密鑰在每個會話中都不相同。當我創建訂單時,我有第二個請求,但我需要此持票人密鑰來授權交易。我的問題是從一個請求發送數據到另一個?不記名號碼我必須插入'Authorization'字段。請看我的代碼。從一個請求發送JSON響應到另一個請求

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

通常...您發送令牌到客戶端在你的第一個請求,然後將客戶端添加此令牌自己在'Authorization'頭並把它在每次請求。您不必將其從請求傳遞到另一個 請從http://jwt.io的此圖檢查: https://cdn.auth0.com/content/jwt/jwt-diagram.png – mJehanno

+0

好的,非常感謝你的幫助 –

回答

0

你通常是先建立你的令牌,可以追溯到客戶端。客戶端現在有一個令牌。通常,這被編碼,幷包含如用戶名,ID信息,任何特殊的「角色」,他們可能有,到期時間等

然後,您必須連接到授權頭在任何後續請求令牌。

基於你的代碼的語法,我假設你使用express.js。如果我在這裏錯了,請糾正我。無論如何,它使用一種稱爲「中間件」的概念。基本上,您可以在發送迴應之前運行其他JavaScript函數...您需要這樣的東西。要知道,我其實沒有出測試這個代碼,所以它可能是行不通的,但希望它指向你在正確的方向:

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

注意使用decodeToken功能作爲中間件,以及它如何在next()上調用。我鼓勵您查看快遞中間件,或者您正在使用的任何庫來處理這種情況。

此外,在一個側面說明...你匍匐向一些所謂的根據你的代碼貼有「回叫地獄」。雖然它與你的問題沒有任何關係,但我鼓勵你谷歌「回頭看看」,看看它爲什麼不好,你可以怎樣教你自己不要使用它。 :)快樂的編碼!

相關問題