私は 2.2.2 CakePHP アプリケーションを実行しています。すべてが希望どおりに動作します。現在、そのための Android アプリを開発しているため、これら 2 つのアプリ間のインターフェイスを作成する必要があります。そのため、ユーザーを手動でログインする必要があります。そこで、すべてを 1 か所にまとめるために、まったく新しいコントローラー、AndroidController を作成しました。最初に行うことは、Login-Action です。そこで、次のコントローラーをセットアップしました。
<?php
App::uses('AppController', 'Controller');
/**
* Android Controller
*
* @package app.Controller
*/
class AndroidController extends AppController {
public $components = array('RequestHandler','Auth');
public $uses = array('User');
public function beforeFilter() {
$this->Auth->allow();
}
public function login() {
//For testing purposes
$postarray = array('_method' => 'POST','data' => array('User' => array('email' => 'user@gmail.com', 'password' => 'THISisDEFINITELYaWRONGpassword')));
$id = $this->tryToGetUserID($postarray['data']['User']['email']);
if($id == 0){
//return Error json, unknown User
$this->set('result', array(
'tag' => 'login',
'success' => 0,
'error' => 1,
'error_msg' => 'Unknown User'
));
}else{
// if ($this->request->is('post')) {
$postarray['data']['User'] = array_merge($postarray['data']['User'], array('id' => $id));
$this->User->id = $id;
if ( $this->Auth->login($postarray['data']['User'])) {
// Login successfull
$this->User->saveField('lastlogin', date(DATE_ATOM));
$user = $this->User->find('all', array(
'recursive' => 0, //int
'conditions' => array('User.id' => $id)
));
$loggedInUser = array(
'tag' => 'login',
'success' => 1,
'error' => 0,
'uid' => '??',
'user' => array(
'name' => $user['0']['User']['forename'].' '.$user['0']['User']['surname'],
'email' => $user['0']['User']['email'],
'created_at' => $user['0']['User']['created'],
'updated_at' => $user['0']['User']['lastlogin']
)
);
$this->set('result', $loggedInUser);
} else {
// Login failed
$this->set('result', array(
'tag' => 'login',
'success' => 0,
'error' => 2,
'error_msg' => 'Incorrect password!'
));
}
// }
}
}
public function tryToGetUserID($email = null) {
$user = $this->User->find('list', array(
'conditions' => array('User.email' => $email)
));
if(!empty($user)){
return array_keys($user)['0'];
}else{
return 0;
}
}
}
このメソッドは POST リクエストとして呼び出されることを知っておく必要がありますが、テスト目的でポスト配列を手動で作成しました。今後は $_POST 配列を使用します。では、何が起こるか: 登録ユーザーによるログインは機能しますが、毎回機能します! パスワードが間違っているか、欠落しているにもかかわらず!プログラムは、「ログインに失敗しました」というコメントのあるコードの部分に到達することはありません。
ここで何か不足していますか..?
ありがとうございました!