ここで REST プラグインを使用して CakePHP アプリの API を構築しようとしています: https://github.com/kvz/cakephp-rest-plugin
このプラグインを使用する理由は、保護されたメソッドでの API 呼び出しに関する認証を処理し、将来的にログなどを処理する簡単な方法が必要だったからです。
重複を防ぐために、プラグインは前の質問で説明されているように設定されています: CakePHP REST Plugin not return dataは現在修正され、機能しています。
次の部分は、認証の処理です。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);
}
});
ここで私が持っている3つの主な質問は次のとおりです。
ここでユーザー名とパスワードを手動で渡していますが、ヘッダー部分は正しいですか? それに関する説明は、ここのドキュメントではかなり曖昧です: 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"
}
}