nodejs向遠程伺服器發送post請求----融雲Web SDK/用戶端擷取token

來源:互聯網
上載者:User

標籤:

最近要用到一個叫融雲的及時通訊的SDK,在擷取token這個步驟的時候有點卡頓,以防以後碰到類似的問題,再此記錄一下。

用戶端通過融雲 SDK 每次串連伺服器時,都需要向伺服器提供 Token,以便驗證身份,流程如下:

流程如下:

1、用戶端擷取使用者id,並向伺服器請求token(注意這裡的伺服器不是融雲的伺服器,而是用戶端的服務端)

2、用戶端的服務端接收到token請求後,向融雲的伺服器請求token

3、融雲端服務器接受到token請求,返回token給用戶端的服務端。

4、用戶端的服務端接收到token以後,儲存在資料庫。

5、服務端返回token給用戶端。用戶端每次請求token時,先檢查資料庫中是否存在有效token。

6、用戶端附帶token串連到聊天伺服器

 

官方給的樣本如下:

http請求:

POST /user/getToken.json HTTP/1.1Host: api.cn.ronghub.comApp-Key: uwd1c0sxdlx2Nonce: 14314Timestamp: 1408706337Signature: 45beb7cc7307889a8e711219a47b7cf6a5b000e8Content-Type: application/x-www-form-urlencodeduserId=jlk456j5&name=Ironman&portraitUri=http%3A%2F%2Fabc.com%2Fmyportrait.jpg

http響應:

HTTP/1.1 200 OKContent-Type: application/json; charset=utf-8{"code":200, "userId":"jlk456j5", "token":"sfd9823ihufi"}

一開始我並不理解擷取token的流程,然後在瀏覽器頁面發送向融雲發送post請求,結果一直報錯,大致是跨域問題(因為涉及到要向api.cn.ronghub.com主機地址發送post請求),整了一整天還是沒解決,然後就考慮在nodejs伺服器來發送post請求。

代碼如下:

var regUrl = "http://api.cn.ronghub.com/user/getToken.json";    var post_option = url.parse(regUrl);    post_option.method = ‘POST‘;    var post_data = querystring.stringify({        ‘userId‘ : "*******",    //你的        ‘name‘ : "*******",      //你的        ‘portraitUri‘ : "http://tva1.sinaimg.cn/crop.0.0.100.100.180/7e07eb40jw8f6hqda28x7j202t02tmx1.jpg"    });    console.log(post_data);    post_option.headers = {        ‘Content-Type‘ : ‘application/x-www-form-urlencoded‘,        ‘Content-Length‘ : post_data.length,        ‘App-Key‘:"**********",    //你的        ‘appSecret‘:‘********‘,    //你的        ‘Nonce‘:‘14314‘,        ‘timestamp‘:‘1408706337‘,        ‘Signature‘:‘**************‘  //你的    };    var post_req = http.request(post_option, function(response){        response.on(‘data‘, function(buffer){            console.log(buffer.toString());        });    });    post_req.write(post_data);    post_req.end();

上面代碼有些參數沒有給出需要你自己填寫,Signature是經過sha1換算以後得來的值,是不會變的,大家可以根據自己的情況修改

Signature值的擷取如下:

var appSecret = ‘******‘; // 開發人員平台分配的 App Secret。var nonce = "14314"; // 擷取隨機數。var timestamp = "1408706337"; // 擷取時間戳記。var str = [appSecret,nonce,timestamp].sort().join(‘‘);var signature = sha1(str);

上面的代碼擷取token以後直接顯示在瀏覽器上,並沒有存入資料庫,大家可以自己修改。

 

總結:

如果採用瀏覽器來發送post請求,會存在跨域的問題,這時候就可以使用伺服器來發送,瀏覽器請求伺服器,伺服器再體瀏覽器向遠程伺服器發送post請求,就完美避開了瀏覽器跨域的問題。

 

nodejs向遠程伺服器發送post請求----融雲Web SDK/用戶端擷取token

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.