将 Cakephp Auth 组件用于 Web 服务
Use Cakephp Auth component for webservices
我正在为 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.']);
}
}
}
我在使用 debug($user);
时收到 false
,即使我使用的是正确的凭据。
你不能只是把东西放在一起并期望它能工作...我的意思是,文档在哪里说 AuthComponent::identify()
会将用户名和密码作为参数?
在一个动作中加载 auth 组件也是毫无意义的,因为该单个动作只需要 work/be 身份验证。同样,不要只是把东西放在一起,阅读文档,尝试理解它们是如何工作的,如果有必要,请查看源代码,然后然后开始编码,如图所示在文档中!
也就是说,默认身份验证器需要 POST 数据中的凭据
表单认证
[...]
FormAuthenticate
allows you to authenticate users based on form POST data. Usually this is a login form that users enter information
into.
[...]
By default AuthComponent uses 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 组件,如文档中所示,这应该在控制器 initialize()
方法中完成,理想情况下,以防完整的应用程序应该是受保护,这将是 AppController
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', /* ... */);
// ...
}
Cookbook > Controllers > Components
另见
我正在为 android 应用程序创建网络服务。我正在使用 cakephp 3 Auth。我从 $this->request->query['username']
和 $this->request->query['password]
.
如何使用 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.']);
}
}
}
我在使用 debug($user);
时收到 false
,即使我使用的是正确的凭据。
你不能只是把东西放在一起并期望它能工作...我的意思是,文档在哪里说 AuthComponent::identify()
会将用户名和密码作为参数?
在一个动作中加载 auth 组件也是毫无意义的,因为该单个动作只需要 work/be 身份验证。同样,不要只是把东西放在一起,阅读文档,尝试理解它们是如何工作的,如果有必要,请查看源代码,然后然后开始编码,如图所示在文档中!
也就是说,默认身份验证器需要 POST 数据中的凭据
表单认证
[...]
FormAuthenticate
allows you to authenticate users based on form POST data. Usually this is a login form that users enter information into.[...]
By default AuthComponent uses 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 组件,如文档中所示,这应该在控制器 initialize()
方法中完成,理想情况下,以防完整的应用程序应该是受保护,这将是 AppController
public function initialize()
{
parent::initialize();
$this->loadComponent('Auth', /* ... */);
// ...
}
Cookbook > Controllers > Components