2013-01-09 52 views
4

是否可以與cakePhp網站通信android應用程序並共享數據?如果可能的話,我想創建一個可以登錄到網站的應用程序;我的疑問是:連接Android應用程序與CakePhp網站

  1. 如何將用戶名和密碼從我們的應用程序傳遞到cakephp網站登錄頁面?任何人都可以給我看一個示例程序嗎?

  2. cakephp控制器如何處理此請求並響應此請求?請給我看一個示例程序?

(我在Android和CakePHP的初學者。)

+1

也許這可以幫助[http://stackoverflow.com/questions/9551873/cakephp-2-0-and-mobile-application-authentication][1] 如果不是,請告訴我 [1]:http:// stackoverflow。COM /問題/ 9551873/CakePHP的-2-0和移動應用程序的認證 –

+0

非常感謝你 –

回答

2

使用Admad JWT驗證插件

如果使用cakephp3與改變你的登錄功能這一項:

public function token() { 

     $user = $this->Auth->identify(); 


     if (!$user) { 

      throw new UnauthorizedException('Invalid username (email) or password'); 
     } 

     $this->set([ 
      'success' => true, 
      'data' => [ 
       'token' => JWT::encode([ 
        'sub' => $user['id'], 
        'exp' => time() + 604800 
       ], 
       Security::salt()) 
      ], 
      '_serialize' => ['success', 'data'] 
     ]); 
} 

您可以閱讀本教程的REST API和智威湯遜驗證實施

http://www.bravo-kernel.com/2015/04/how-to-add-jwt-authentication-to-a-cakephp-3-rest-api/

8

快速的答案 - 是的!

我們剛剛完成推出一個Android應用程序到市場,做這件事。以下是我們如何做到的:

1)在Eclipse中下載並學習使用Cordova PhoneGap(2.2.0是最新版本)。這隻需要一些HTML和大量的Javascript就可以讓整個事情變得更容易。

2)在你的JS中,創建使用AJAX參數推送登錄信息的方法。例如:

document.addEventListener('deviceready', onDeviceReady, false); 

function onDeviceReady() { 

    $("#login").click(function() { 
     $email = $("#UserEmail").val(); 
     $pass = $("#UserPassword").val(); 
      $.ajax({ 
        url : yourURL + 'api/users/login', 
        async : false, 
        data : { 
         'email' : $email, 
         'password' : $pass 
        }, 
        dataType : 'json', 
        type : 'post', 
        success : function(result) { 
          /** 
          * do your login redirects or 
          * use localStorage to store your data 
          * on the phone. Keep in mind the limitations of 
          * per domain localStorage of 5MB 
          */ 
          // you are officially "logged in" 
          window.location.href = "yourUrl.html"; 
          return; 
        }, 
        error : function(xhr, status, err) { 
         // do your stuff when the login fails 
        } 
      }); 
    } 
} 

3)在蛋糕/ PHP,在這裏你的用戶控制器將在AJAX調用的用戶名和密碼的數據,並使用其認證。

<?php 

class UsersController extends AppController { 

    public $name = 'Users'; 

    public function beforeFilter() { 
     parent::beforeFilter(); 
     $this->Auth->allow('api_login'); 
    } 

    public function api_login() { 
     $this->autoRender = false; 

     if ($this->request->data && isset($this->request->data['email']) && isset($this->request->data['password'])) { 

      $arrUser = $this->User->find('all',array(
        'conditions'=>array(
          'email'=> $this->request->data['email'], 
          'password' => $this->Auth->password($this->request->data['password']), 
        ) 
       ) 
      ); 

      if (count($arrUser) > 0) { 
       $this->Session->write('Auth.User',$arrUser[0]['User']); 

       // Do your login functions 

       $arrReturn['status'] = 'SUCCESS'; 
       $arrReturn['data'] = array('loginSuccess' => 1,'user_id' => $arrUser[0]['User']['id']); 

      } else { 
       $arrReturn['status'] = 'NOTLOGGEDIN'; 
       $arrReturn['data'] = array('loginSuccess' => 0); 
      } 
     } else { 
      $arrReturn['status'] = 'NOTLOGGEDIN'; 
      $arrReturn['data'] = array('loginSuccess' => 0); 
     } 
     echo json_encode($arrReturn); 
    } 
} 
?> 

就是這樣。您現在通過了CakePHP的身份驗證。

你不需要使用「api_」,你可以使用你想要的任何函數名稱,但是這幫助我們保持了我們允許移動用戶對web用戶執行的操作。

現在,這些只是構建模塊。您基本上必須使用HTML和Javascript在手機上創建網站的完整版本,因此根據您的應用程序,創建適用於您的網站的響應式設計並允許移動瀏覽可能更容易。

HTH!

+0

非常感謝你,作爲一個初學者你的答案是非常有用的,我 –

+0

你能不能給我傳遞了Android代碼用戶名和密碼到cakephp?也可以從cakephp控制器中檢索一些數據到android應用程序 –

+0

的一些數據的代碼可以請你給我連接cakephp網站的Android代碼 –

-1

如果將cakephp中的大部分視圖頁面重建爲ajax,似乎將會破壞使用cakephp的目的。

+0

這並不試圖回答這個問題。 – Jerrad