2016-11-28 21 views
0

こんにちは私は、ionic(角型)アプリケーション用のrestクライアント(ログイン認証付き)用にcakephpを設定しようとしています。CakePHPとREST Api for ionic(角型)app

[OK]を、私はthis setup tutorialようにCakePHPを設定して、例えば私は、データを取得していること:

public function projects() 
{ 

    $projects = $this->Projects->find('all'); 
    $this->set([ 
     'projects' => $projects, 
     '_serialize' => ['projects'] 
    ]); 
} 

とイオン

$.httpを介してデータを取得し、この仕事を完璧に私は、モバイルクライアントのためにケーキの認証を設定してみてください。

私はこれをどうやって行うのか分かりません。私のResttest Controllerでは、私はイオンアプリのセッションIDを設定しましたが、イオンはこのセッションをキャッシュしませんでした。私のcakePhpコードは間違っていると思います。

CakePHPのコントローラ:

<?php 
namespace App\Controller; 

use App\Controller\AppController; 
use Cake\Controller\Component\RequestHandlerComponent; 
// use Cake\View\Helper\SessionHelper; 

class ResttestController extends AppController 
{ 


    public function initialize() 
    { 
     parent::initialize(); 
     $this->loadComponent('RequestHandler'); 
     $this->loadModel('Projects'); 
     $this->loadModel('Task'); 
     $this->loadModel('User'); 
     $this->viewBuilder()->layout(false); 
     $this->response->header('Access-Control-Allow-Origin', '*'); 
     $this->loadComponent('Auth', [ 
      'loginAction' => [ 
       'controller' => $this->name, 
       'action' => 'login', 
       // '_ext'=>'json' 
      ], 
      'authorize'=>['Controller'], 

     ]); 

     // Basic setup 
     $this->Auth->config('authorize', ['Controller']); 
    } 


    public function login(){ 
     header('Access-Control-Allow-Headers: Content-Type, x-xsrf-token'); 
     $this->response->header('Access-Control-Allow-Methods', '*'); 


     if($this->request->is('post')){ 


      $postdata = file_get_contents("php://input"); 
      $d = json_decode($postdata); 

      if($this->Auth->user()){ 
       $response =array("success"=>2,'msg'=>'logged After'); 
      } 

      // $d = $this->request->data; 

      if(!$d->password || !$d->login){ 
       $response = array("success"=>0,'msg'=>'n');   
      } 


      $u = $this->User->find() 
       ->where(['email'=>$d->login]) 
       ->first(); 


      if($u){ 
       $salt = $u->salt; 
       $input_password = crypt($d->password, '$2y$12$' . $salt); 
       $password = $u->password; 


       if($password == $input_password){ 

        $tok = self::getToken(); 
        $u->token = $tok; 

        $out = $this->Auth->setUser($u); 




        $response = array("success"=>1,'msg'=>'logged', 'token'=>$tok, 'out'=>$out,'sadga'=>$this->Auth->identify,'asf'=>$this->Auth,'adsafsfq'=>$d,'$this->request'=>$this->request,'$this->response'=>$this->response,'apache_request_headers '=>apache_request_headers()); 

       }else{ 
        $response = array("success"=>0,'msg'=>'n'); 
       } 


      }else{ 
       $response = array("success"=>0,'msg'=>'n'); 
      } 

     }else{ 
       $response =array("success"=>0,'msg'=>'n'); 

     } 

     $this->set([ 
      'response' => $response, 
      '_serialize' => ['response'] 
     ]); 
    } 


    private function getToken(){ 
     return crypt(sha1(md5(uniqid(rand(), true)))); 
    } 

    public function testAuth(){ 

    } 
} 

このコードリターンセッションとユーザーデータが、仕事と私はモバイル認証のための良い方法ではないと思いません。あなたはcakephpの認証について考えていますか? 私のコードをより安全にする方法を教えてください。

答えて

1

アプリケーションをバックエンドapiとフロントエンドに分割するとき、バックエンドをステートレスアプリケーションとして考慮する必要があります。つまり、認証のためにセッションを使用することはできません。

代わりに、JWTなどのトークンを返すauth/loginおよびauth/register restエンドポイントを実装する必要があります。

あなたは、このようなライブラリを見つけることができますeasely cakephp2については

:あなたはAuthコンポーネントを設定するときhttps://github.com/t73biz/cakephp2-jwt-auth

ではなく、フォームのこのオーセンティケータを使用してください。 フロントエンド側のパストークンのように、プラグインで説明されています。