2014-02-20 43 views
0

除了它自己的(TBD)登錄功能之外,我希望我的AngularJS應用程序能夠接受來自另一個應用程序的令牌作爲有效的登錄替代方案。如果可能的話,我不希望該標記在URL/GET參數中可見,但我找不到處理POST參數的任何方法。目前,該應用程序由HTML5引導。我想避免腳本,但PHP和Python不是不可能的。將敏感信息傳遞到AngularJS單頁應用程序

有沒有辦法在Angular中獲得POST參數?

+0

你在說什麼POST參數?什麼是發佈什麼? –

+0

從另一個網絡應用程序到我的AngularJS SPA入站POST – N13

回答

3

無法在單個頁面應用中獲取POST參數,因爲您無法將其作爲Web瀏覽器發佈到客戶端;你只能POST到服務器。

this question.

當你做一個POST請求,服務器解釋變量和響應返回的資源(如HTML頁面)。默認情況下,該頁面無權訪問產生它的請求中的任何標題或數據。您可以訪問GET參數的唯一原因是JavaScript可以檢查加載頁面的URL,這恰好是存儲參數的地方。

一些服務器腳本將是必要的,但它不應該太難。一個快速和骯髒的答案是使用服務器腳本注入post數據爲JavaScript代碼(例如,PHP)

echo "<script>doSpecialLogin(".$_POST['superSecretKey'].");</script>" 

不過,我也強烈建議您花一些時間來確保你的方法實際上是安全的,也許看像OAuth這樣的技術。

+0

這是我想到的,但值得一問。 OAuth的獎勵積分。 – N13

0

HTTP請求從客戶端發送到服務器。 您可以通過兩種方式將數據從服務器發送回客戶端:標頭和響應主體。它對於POST和GET都完全相同,區別在於您也可以使用POST發送請求正文。

現在讓我們假設您使用的是AngularJS's $http

$http.get(url)向服務器發送GET請求。您使用.success(callback)捕獲響應,其中使用表示響應主體的參數調用回調。

$http.post(url, requestData)確實與requestData是發送請求正文相同。

function callback(responseBody) { 
} 

服務器端,在PHP中,你的腳本輸出發送回客戶端 和responseBody參數將包含的一切。

因此,與郵政,您使用請求主體從客戶端發送數據到服務器和響應主體從服務器發送數據返回給客戶端。

這整個「兩步」過程是一個HTTP POST請求。