RESTful 速率限制问题 [ 2.0 版本 ]
restful按照教程全部搭建完毕,授权时推荐设置这个:
'enableSession' => false,
但是这样就会导致开启速率限制的时候,找不到用户信息,yii\web\user
public function getIdentity($autoRenew = true)
{
if ($this->_identity === false) {
if ($this->enableSession && $autoRenew) {
try {
$this->_identity = null;
$this->renewAuthStatus();
} catch (\Exception $e) {
$this->_identity = false;
throw $e;
} catch (\Throwable $e) {
$this->_identity = false;
throw $e;
}
} else {
return null;//session不打开用户信息为空,则无法启用速率限制
}
}
return $this->_identity;
}
@魏曦教你学 老师能指点下吗?我现在就是把 session 打开就解决这个问题了
共 2 个回答
-
既然都 restful 了,肯定不应该在使用 基于 session 的用户认证模式了,建议你看下权威指南的这一章
https://www.yiiframework.com/doc/guide/2.0/zh-cn/rest-authentication共 1 条回复 -
从我贴的那个链接中 截两段话
图1:
认证状态不能保持,每一次请求都是通过 access token 实时认证的图2:
认证成功后 才会进行频率限制,所以 RateLimit 类的这个方法中public function beforeAction($action) { if ($this->user === null && Yii::$app->getUser()) { $this->user = Yii::$app->getUser()->getIdentity(false); } if ($this->user instanceof RateLimitInterface) { Yii::debug('Check rate limit', __METHOD__); $this->checkRateLimit($this->user, $this->request, $this->response, $action); } elseif ($this->user) { Yii::info('Rate limit skipped: "user" does not implement RateLimitInterface.', __METHOD__); } else { Yii::info('Rate limit skipped: user not logged in.', __METHOD__); } return true; }
并不会进入第一个 if 判断
Cathay 觉得很赞
沃毕尼闷兜率
注册时间:2017-05-08
最后登录:2020-01-06
在线时长:11小时20分
最后登录:2020-01-06
在线时长:11小时20分
- 粉丝1
- 金钱30
- 威望0
- 积分140