Cam*_*ron 10 api jquery cakephp cordova
我正在构建一个内置在PhoneGap中的简单应用程序,它使用REST API从我的网站上加载数据(因为你无法在PhoneGap中运行PHP).
列出一些数据的示例可能是:
$.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]);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这很好,返回的数据可以在我的PhoneGap应用程序中使用.但是,假设帖子列表要求您登录...
我该怎么处理?因为与重定向到登录表单的普通身份验证请求不同,在我的JSON世界中,这不会发生.实际上会发生什么是返回实际的HTML登录表单然后导致错误,因为我的JavaScript期望JSON而不是HTML.
是否有处理此问题的最佳做法,例如,如果要求身份验证,则在PhoneGap应用程序中加载登录表单视图,而不是从应用程序返回HTML登录表单,因为它正在进行此操作?也许通过JSON发送auth请求?
举个例子,一个简单的JSONized方法如下:
public function index() {
$this->set('posts', $this->paginate());
$this->set('_serialize', array('posts'));
}
Run Code Online (Sandbox Code Playgroud)
并且如前所述,我可以beforeFilter
通过不将方法名称传递给我来保护此方法$this->Auth->allow()
.所以我假设我需要在beforeFilter中做一些聪明的事情才能知道请求是否是JSON,如果是,那么检查方法是否需要授权然后如果是这样的话要么发回错误(而不是像HTML那样的HTML表单)通过JSON中的AuthComponent)或允许访问.
更新:2012年1月13日
在对这个主题进行了一些研究之后,我看了一下Forrst API,因为它们似乎已经有效地构建了我想要用RESTful API构建的东西.
例如,他们有一个如下调用:https://forrst.com/api/v2/post/comments?tiny_id = HUD这基本上是说显示带有微小ID的HUD的帖子的评论.如果您未经过身份验证,您将获得以下内容:
{"resp":{"error":"this method requires authentication"},"stat":"fail","in":0.0903,"authed":false,"authed_as":false,"env":"prod"}
Run Code Online (Sandbox Code Playgroud)
现在有趣的部分是即使我登录Forrst我仍然会收到该错误消息,因为它没有查看我的会话,而是期望某种令牌来验证实际请求.例如?access_token=550e8400-e29b-41d4-a716-446655440000
所以我想这里的主要问题是如何将其构建到我的Cake App中?计划如下:
在我的应用程序中,无论您是通过AJAX还是在浏览器中请求,它都会将您重定向到登录页面.Forrst处理它们并且在调用它的API时总是返回JSON错误并且不会返回HTML!这是我想在实现中实现的目标.我已将access_token列添加到我的users表中(出于安全原因,每当有人更新其密码时,该表都会更改).下一步是A)检查受保护方法的访问令牌,如果正确则允许或拒绝,然后B)当没有令牌存在或不正确并且发送正确的错误状态而不是HTML登录时我需要处理形成.
jQuery ajax() 函数使您能够使用用户名:和密码:(http://api.jquery.com/jQuery.ajax/)传递登录信息以及请求,使用这些信息并处理身份验证失败错误: