gpt4 book ai didi

api - REST API 上的 CakePHP 身份验证

转载 作者:行者123 更新时间:2023-12-04 11:24:54 26 4
gpt4 key购买 nike

因此,我正在为正在开发的 Web 应用程序创建 REST API,并且我知道身份验证的基本方法是在每个请求上发送凭据或发送 token 。

由于我以前从未使用过 token ,我想我可能会为每个请求发送凭据。关键是我找不到有关如何在 Controller 中处理此问题的任何示例。会是这样吗?

public function api_index() {
if(!$this->Auth->login()) return;

$this->set(array(
'models' => $this->Model->find('all'),
'_serialize' => array('models')
));
}

我真的不认为这是方式 AuthComponent::login()工作,我可以在这里得到一些指导吗?

最佳答案

好的,首先澄清一下 AuthComponent::login 是如何工作的。在 Cake 2.x 中,该方法不进行任何身份验证,而是在您的 session 中创建 Auth.User 数组。您需要自己实现实际的身份验证(用户模型是执行此操作的自然场所)。基本的身份验证方法可能如下所示:

App::uses('AuthComponent', 'Controller/Component');
public function authenticate($data) {
$user = $this->find('first', array(
'conditions' => array('User.login' => $data['login']),
));
if($user['User']['password'] !== AuthComponent::password($data['password']) {
return false;
}

unset($user['User']['password']); // don't forget this part
return $user;
// the reason I return the user is so I can pass it to Authcomponent::login if desired
}

现在,只要加载了 User 模型,您就可以从任何 Controller 使用它。您可能知道可以通过调用 Controller::loadModel('User') 加载它。 .

如果您想对每个请求进行身份验证,那么您应该放入 AppController 的 beforeFilter 方法:
public function beforeFilter() {
$this->loadModel('User');
if(!$this->User->authenticate($this->request->data)) {
throw new UnauthorizedException(__('You don\'t belong here.'));
}
}

以上所有内容都假设您每次都传递登录名和密码的 POST 值。我认为 token 身份验证绝对是更好的方法,但对于启动和运行这应该有效。一些缺点包括每次请求都以明文形式发送密码(除非您需要 ssl),以及每次散列算法的 CPU 使用率可能很高。尽管如此,我希望这能让您更好地了解如何使用 cakephp 进行身份验证。

如果有什么需要澄清的,请告诉我。

更新:
自从发布这篇文章后,我发现您实际上可以不带参数地使用 AuthComponent::login,但我不喜欢这样做。来自 CakePHP 文档:
In 2.x $this->Auth->login($this->request->data) will log the user in with 
whatever data is posted, whereas in 1.3 $this->Auth->login($this->data)
would try to identify the user first and only log in when successful.

关于api - REST API 上的 CakePHP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21745320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com