2014-02-20 36 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请求。