Yii2 Rest API基本身份验证无效凭据

时间:2016-05-15 05:22:26

标签: php yii2

我使用邮递员来测试我的API但由于某种原因它不再有效,因为每个请求都在说

  

您请求的凭据无效。

我注意到,如果我在调试器中查看Authorization请求标头未显示。我已经测试过在邮递员中添加其他标题并且会显示出来。

我有用户模型设置,可以通过common\models\User中的访问令牌找到:

public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['access_token' => $token]);
    }

我在控制器的行为功能中有这个:

public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => HttpBasicAuth::className(),
        ];
        $behaviors['access'] = [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'allow' => true,
                    'roles' => ['@'],
                    'verbs' => ['GET'],
                ],
            ],
        ];
        return $behaviors;
    }

这是我的main.php文件的组件部分:

'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => false,
        ],
        'log' => [
            'targets' => [
                [
                    'class' => 'yii\log\DbTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                'v1/login' => 'v1/login',
                ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/user']],
                ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/userinfo']],
                'v1/<controller>/<action>' => 'v1/<controller>/<action>',
            ],
        ],
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ]
        ]
    ],

3 个答案:

答案 0 :(得分:1)

我必须将CGIPassAuth on添加到我的目录配置中,因为Apache隐藏了授权标头。

答案 1 :(得分:0)

您需要在api中传递基本格式的授权标头。 前基本{token}

答案 2 :(得分:0)

在您的.htaccess文件中添加:

RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]