我一直在尝试使用此处的 REST 插件为我的 CakePHP 应用程序构建一个 API:https ://github.com/kvz/cakephp-rest-plugin
使用这个插件的原因是因为我想要一种简单的方法来处理与受保护方法上的 API 调用有关的身份验证,并在未来处理日志记录等。
为了防止重复,插件的设置如上一个问题所述:CakePHP REST 插件不返回数据,该数据现已修复并可以正常工作。
下一部分是处理身份验证。我在我的 beforeFilter 方法中添加了以下内容,基本上应该说如果它是一个休息调用并且用户没有登录(注意:并非所有方法都需要用户登录)然后登录。
if (!$this->Auth->user()) {
if ($this->Rest->isActive()) {
$loginUser = $this->User->loginUser(
$credentials['username'],
AuthComponent::password($credentials['password'])
);
if($loginUser) {
if (!$this->Auth->login($loginUser['User'])) {
$msg = sprintf('Unable to log you in with the supplied credentials. ');
return $this->Rest->abort(array('status' => '403', 'error' => $msg));
}
}
}
}
对于那些想要查看模型调用的人:
public function loginUser($usernameOrEmail, $password)
{
return $this->find('first', array(
'conditions' => array(
'OR' => array(
'User.email' => $usernameOrEmail,
'User.username' => $usernameOrEmail,
'User.phone' => $usernameOrEmail
),
'User.password' => $password
),
'recursive' => -1
));
}
但是我无法让它工作。我正在做这样的测试请求:
$.ajax({
url: 'http://domain.com/users/test.json',
dataType: 'jsonp',
data: { username: 'test', password: 'test' },
headers: {
Authorization: "TRUEREST"
},
success: function(response) {
console.log(resonse);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR, textStatus, errorThrown);
}
});
我在这里的三个主要问题是:
我在这里手动传递用户名和密码但是标题部分正确吗?关于它的解释在此处的文档中相当模糊:https ://github.com/kvz/cakephp-rest-plugin#authorization
$credentials['username']
要捡起来吗?$credentials 是具有 HTTP 身份验证的全球性事物还是我错过了什么?这是否会在用户每次发出请求时登录?因为如果是这样的话,它似乎有点混乱。
当前的代码实现错误:Uncaught SyntaxError: Unexpected token :
这是JSON输出,对我来说看起来不错...
{
"data": {
"User": []
},
"meta": {
"status": "error",
"feedback": [{
"message": "Log in to continue",
"level": "error"
}],
"request": {
"http_host": "domain.com",
"http_user_agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.29 Safari\/537.22",
"server_addr": "##.##.###.###",
"remote_addr": "##.###.###.###",
"server_protocol": "HTTP\/1.1",
"request_method": "GET",
"request_uri": "\/users\/test.json?callback=jQuery172015279368730261922_1358207116601&username=test&password=test123&_=1358207116611",
"request_time": 1358207116
},
"credentials": {
"class": null,
"apikey": null,
"username": null
},
"time_epoch": "1358207117",
"time_local": "Mon, 14 Jan 2013 15:45:17 -0800",
"version": "0.3"
}
}