You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Yii2 REST API的QueryParamAuth时遇401未授权错误及参数问题

Yii2 QueryParamAuth 401未授权问题排查方案

错误信息

"data": {
"name": "Unauthorized",
"message": "Your request was made with invalid credentials.",
"code": 0,
"status": 401,
"type": "yii\web\UnauthorizedHttpException"
}

当前配置

$behaviors['authenticator'] = [
    'class' => QueryParamAuth::class,
    'tokenParam' => 'access-token',
];

排查步骤

  • 确认请求参数传递正确:检查请求中是否携带了access-token参数,参数名要和配置里的tokenParam完全一致,注意大小写(Yii2默认区分大小写)。GET请求需在URL后拼接?access-token=你的令牌值,POST请求要在表单或Query参数中带上该字段。
  • 验证令牌有效性:确保使用的令牌在存储介质(如数据库用户表)中存在,且未过期、未被标记无效。核对用户表(默认user表)的access_token字段值与你传递的令牌是否完全一致,避免空格或特殊字符转义问题。
  • 检查用户模型实现:用户模型必须实现yii\web\IdentityInterface接口,且正确重写findIdentityByAccessToken()方法,确保能根据传入的令牌返回对应用户实例。示例实现:
public static function findIdentityByAccessToken($token, $type = null)
{
    return static::findOne(['access_token' => $token]);
}

若令牌存储逻辑不同(如单独的令牌表),需调整该方法的查询逻辑以匹配你的存储规则。

  • 排除权限控制干扰:若控制器同时配置了AccessControl行为,检查其rules规则是否允许已认证用户访问目标接口,避免额外权限规则拦截请求。
  • 确认请求参数位置:QueryParamAuth默认从Query参数中读取令牌,若使用POST JSON请求,需确保Yii2已配置JSON解析器,且令牌参数名正确出现在JSON请求体中。
  • 验证令牌生成逻辑:检查生成access-token的代码,确保令牌正确保存到用户记录中,无生成或保存失败情况。示例生成逻辑:
$user->access_token = Yii::$app->security->generateRandomString();
$user->save(false); // 根据实际场景处理验证与保存逻辑

内容的提问来源于stack exchange,提问作者Gnoul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:20:15