使用Cakephp Auth组件进行Web服务

时间:2015-08-04 10:08:25

标签: cakephp-3.0

我正在为Android应用创建一个网络服务。我正在使用cakephp 3 Auth。我从$this->request->query['username']$this->request->query['password]中的Android应用获取用户名和密码。

如何使用Auth组件识别用户?

到目前为止,我试过的是:

public function login(){
    if(!empty($this->request->query['username']) && !empty($this->request->query['password'])){
        $this->loadComponent('Auth');
        $user=$this->Auth->identify($this->request->query['username'],$this->request->query['password']);
        if($user){
            $this->output(['status'=>'1','message'=>'Success','user_id'=>(string)$user->id,'plan_id'=>
                    (string)$user->plan_id]);
        }else{
            $this->output(['status'=>'0','message'=>'Invalid Username/Password.']);
        }
    }    
}

即使我使用正确的凭据,即使我使用false,我也会收到debug($user);

1 个答案:

答案 0 :(得分:2)

你不能只是把东西放在一起并希望它能起作用......我的意思是,文档在哪里说AuthComponent::identify()会将用户名和密码作为参数?

同样在一个动作中加载auth组件是没有意义的,因为认证只对该单个动作起作用/需要。同样,不要只是把东西放在一起,阅读文档,尝试理解工作原理,必要时查看源代码,然后开始编写,如文档中所示

话虽这么说,默认身份验证器需要POST数据中的凭据

表单身份验证

  

[...]

     
      
  • FormAuthenticate允许您根据表单POST数据验证用户。通常这是用户输入信息的登录表单   成。
  •   
     

[...]

     

默认情况下,AuthComponent使用FormAuthenticate

* 强调我的

<强> Cookbook > Controllers > Components > Authentication

因此,理想情况下,您应该POST凭据而不是将它们作为查询字符串参数传递。如果那是不可能的并且您必须使用GET(您应该有充分的理由),那么您也可以create a custom authenticator从查询中获取数据,或者甚至将查询字符串数据传递给POST数据在尝试验证用户之前,

$this->request->data['username'] = $this->request->query('username');
$this->request->data['password'] = $this->request->query('password');

这有点难看。

加载auth组件

如前所述,您没有在操作中加载auth组件,如文档中所示,这应该在控制器initialize()方法中完成,理想情况下,如果应该保护完整的应用程序,这将是AppController

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', /* ... */);
    // ...
}

<强> Cookbook > Controllers > Components

另见