gpt4 book ai didi

php - Yii RESTful 认证

转载 作者:搜寻专家 更新时间:2023-10-31 20:43:07 25 4
gpt4 key购买 nike

我找不到在我的应用程序中对 API 用户进行身份验证的方法。我最初打算构建一个用户可以通过 Web 访问和验证的系统,但要求已经改变,我需要实现一些额外的操作,这些操作可以使用 POST API 调用以 RESTful 方式提供。

我创建了一个扩展 CBehaviour 的类,并强制重定向到所有未经身份验证的用户的登录页面 (found on the yii framework forum here)。问题是所有 API 调用都强制通过相同的逻辑,并且任何 POST 请求只是将 HTML 输出到登录页面。

class ApplicationBehavior extends CBehavior {
private $_owner;

public function events() {
return array(
'onBeginRequest' => 'forceGuestLogin',
);
}

public function forceGuestLogin() {
$owner = $this->getOwner();
if ($owner->user->getIsGuest())
$owner->catchAllRequest = array("site/login");
}
}

我将如何着手将 API 用户的身份验证与 Web 用户的身份验证分开?

最佳答案

我会关注这个 guide在 Yii 中创建 REST API。修改配置 urlManager 条目后,您所有的 API 请求都将使用 APIController。然后,您可以将以下代码放在 APIController 的 beforeAction 中,如果用户是访客,则不返回任何内容(或错误消息)

protected function beforeAction($event) {
if (Yii::app()->user->isGuest) {
echo "Invalid credentials";
Yii::app()->end();
}
}

注意:上面的代码适用于我的目的,因为所有 REST 请求都是通过同一个浏览器发送的。 (已经登录并有登录 cookie)

如果您用放置在 protected/controllers 中的新基本 Controller 替换该行为以强制登录,它将仅适用于需要登录的页面,而不适用于您的 APIController。这是我的一个例子:

//Make sure all Controllers which require a login inherit from this
class ControllerLoginRequired extends CController {
public function runAction($action) {
if (Yii::app()->user->isGuest && 'site' != $this->route) {
Yii::app()->user->returnUrl = $this->route;
parent::redirect(array('site/login'));
} else {
parent::runAction($action);
}
}
}

所有解释都适用于通过用户登录 Yii 的同一浏览器的 REST 请求。如果您需要向未登录 Yii 的浏览器的消费者公开您的 REST 服务,我相信您必须想出一个自定义身份验证/ token 方案。

关于php - Yii RESTful 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958291/

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