2

リモートサーバーに接続するAndroidアプリケーションを構築しています。ユーザーに新しいものの追加を許可していますが、追加を許可する前にユーザーを認証する必要もあります。追加するものの例を次に示します。

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(SharedVariables.TAG_NAME, name));
params.add(new BasicNameValuePair(SharedVariables.TAG_ADDRESS, address));
params.add(new BasicNameValuePair(SharedVariables.TAG_TYPE, type));
params.add(new BasicNameValuePair(SharedVariables.TAG_DESCRIPTION, description));
params.add(new BasicNameValuePair(SharedVariables.TAG_DIFFICULTY, difficulty));
params.add(new BasicNameValuePair(SharedVariables.TAG_TERRAIN, terrain));
params.add(new BasicNameValuePair(SharedVariables.TAG_LONG, Double.toString(currentLng)));
params.add(new BasicNameValuePair(SharedVariables.TAG_LAT, Double.toString(currentLat)));
params.add(new BasicNameValuePair(SharedVariables.TAG_UID, Integer.toString(2)));

//Retrieve hash and id to identify authenticate user
UserAuth auth = new UserAuth(AddSpot.this);
HashMap<String,String> session = auth.getUserDetails();
params.add(new BasicNameValuePair(SharedVariables.TAG_UID, session.get("id")));
params.add(new BasicNameValuePair(SharedVariables.TAG_HASH, session.get("hash")));

ご覧のとおり、最初の部分では、ユーザーが自分で追加したものを保存していますが、最後の部分でわかるように、ユーザーIDを渡し、次にトークン/ハッシュをPOSTデータに渡します。私の問題は、データベーステーブルにすべてを追加したくないということです$this->Location->save($this->request->data)。代わりに、ユーザーIDとハッシュを選択して削除し、他のすべてのものを保存できるようにしたいと思います。CakePHPでこれを行うにはどうすればよいですか?

これは今のCakePHPでの私の方法です:

function add()
{               
    if ($this->request->is('post'))
    {
        $response = array();
        $this->loadModel('User');
        if($this->User->validateHash($id, $hash))
        {   
            //Do some logic to remove id and hash from request

            $this->Location->create();
            //Save data from POST
            if ($this->Location->save($this->request->data))
            {
                //Successfully saved
                $this->response->statusCode(200);
            } 
            else
            {
                //Error in saving
                $this->response->statusCode(500);
            }
        }
        else 
        {
            //Does their hash match? No, then they are unauthorized to add
            $this->response->statusCode(401);
        }
    }
    $this->set(compact('response'));
    $this->set('_serialize', array('response'));
}
4

1 に答える 1

2

これ?:

unset($this->request->data['YourModel']['id']);
unset($this->request->data['YourModel']['hash']);
于 2013-03-23T18:46:40.133 に答える