我正在构建一个使用REST API从服务器上的我的网站加载数据的PhoneGap中构建的简单应用程序(因为您无法在PhoneGap中运行PHP)。从CakePHP处理对PhoneGap应用程序的身份验证
上市的一些数据可能是一个例子:
$.ajax({
url: 'http://myserver.com/posts/index.json',
dataType: 'jsonp',
success: function(data) {
for (var i=0,total=data.length; i<total; i++)
{
console.log(data.Post.title[i]);
}
}
});
这是罚款和返回的数据可以在我的PhoneGap应用程序中使用。然而让我们说,帖子列表要求您登录...
我该如何处理?因为与正常的身份验证请求不同,它会重定向到登录表单,在我的JSON世界中,这不会发生。实际上发生的是实际的HTML登录表单被返回,然后导致错误,因为我的JavaScript期望JSON而不是HTML。
是否有处理此问题的最佳做法,例如,如果要求进行身份验证,那么会在PhoneGap应用程序中加载登录表单视图,而不是从应用程序返回HTML登录表单,因为它目前正在执行该操作?也许通过JSON发送一个auth请求?
举个例子简单JSONized方法是这样的:
public function index() {
$this->set('posts', $this->paginate());
$this->set('_serialize', array('posts'));
}
而且如前所述我可以不传递方法的名称为$this->Auth->allow()
保护在beforeFilter
此方法。所以我假设我需要在beforeFilter中做一些聪明的事情来知道请求是否是JSON,如果是,那么检查该方法是否需要授权,然后如果是这样,或者发回错误(而不是HTML格式,如Cake通过AuthComponent)在JSON中或允许访问。
更新:2012年1月13日
在这个问题上做一些研究多之后,我看了看Forrst API,因为他们似乎已经建立有效的什么,我希望建立一个RESTful的条款API。
例如,他们有一个电话,如:https://forrst.com/api/v2/post/comments?tiny_id=HUD这基本上是说用HUD的微小ID显示帖子的评论。你将得到的返回是,如果你没有通过认证的情况如下:
{"resp":{"error":"this method requires authentication"},"stat":"fail","in":0.0903,"authed":false,"authed_as":false,"env":"prod"}
现在最有趣的部分是,即使我登录到Forrst我仍然会得到错误信息,因为它不是在看我的会议,而该公司预计,一种用于验证实际请求的令牌。例如?access_token=550e8400-e29b-41d4-a716-446655440000
所以我想这里的主要问题是,我如何将它建立到我的Cake App中?该计划如下:
在我的应用程序,它会重定向到登录页面,无论你通过AJAX或浏览器请求它。 Forrst处理两者,并且在调用它的API时总是返回JSON错误,并且不会返回HTML!这是我想要实现的目标。我为我的用户表添加了一个access_token列(出于安全原因,每当有人更新密码时,该列就会更改)。下一步是A)为受保护的方法检查此访问令牌,并允许或拒绝它是否正确,然后B)当没有令牌存在或不正确时需要进行一些处理,并发送正确的错误状态而不是HTML登录形成。
如果我正确理解你,你正在为Forrst本身构建一个应用程序?或者您是否将Forrst用作您的用户管理系统?我有Cordova(Phonegap)和CakePHP的经验,所以我可以帮助你,但这个问题并不是100%清楚。你能分享一个链接到你正在使用的确切的API吗?因为我能找到关于这个API的唯一信息是https://forrst.com/api,但它似乎是一个访问他们的帖子的API,而不是一个用户管理系统。所以我不明白你的第一个使用'myserver.com'的代码段和'forrst.com'之间的关系。 – Jelmer
对不起,我只是用Forrst作为我试图创建的API功能的一个例子。特别是JSON的验证部分返回。 **我没有使用任何来自Forrst。** – Cameron
好的,看看我的答案。我希望它能以某种方式帮助你:) – Jelmer