yii2restapi承载认证

yii2restapi承载认证,api,rest,authentication,yii2,bearer-token,Api,Rest,Authentication,Yii2,Bearer Token,我制作了一个yii2restapi。通过API,您可以获得汽车列表。现在我想使用承载身份验证来保护API。但我不知道它是怎么工作的 首先。我在控制器的行为方法中设置了验证器 public function behaviors(){ return [ 'contentNegotiator' => [ 'class' => ContentNegotiator::className(), 'formats' =>

我制作了一个yii2restapi。通过API,您可以获得汽车列表。现在我想使用承载身份验证来保护API。但我不知道它是怎么工作的

首先。我在控制器的行为方法中设置了验证器

public function behaviors(){
    return [
        'contentNegotiator' => [
            'class' => ContentNegotiator::className(),
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ],
        ],
        'authenticator' => [
            'class' => CompositeAuth::className(),
            'authMethods' => [
                HttpBearerAuth::className(),
            ],
        ]
    ];
}
这个很好用。如果我转到URL,我将收到一条“未经授权”的消息

在我的wordpress插件中,我创建了一个函数来使用API并使用身份验证密钥设置标题

function getJSON($template_url) {
    $authorization = "Authorization: Bearer " . get_option("auth_key");

    // Create curl resource
    $ch = curl_init();
    // Set URL
    curl_setopt($ch, CURLOPT_URL, $template_url);
    // Return transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // Set headers
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization));
    // $output contains output as a string
    $output = curl_exec($ch);
    // Close curl resource
    curl_close($ch);

    return json_decode($output, true);
}
但现在我的问题是。如何在API中检查此密钥是否有效并给出响应。我想在de数据库中搜索密钥,如果它存在,还应该给我同一行的id或电子邮件

我不知道该怎么做。

将简单地调用:

因此,您只需要在用户标识类中实现,例如:

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

那么每个客户都应该有自己的accesstoken?您想使用oauth2?在类中,我使用的是另一个表,而不是access_令牌所在的表。知道如何检查另一个表中的访问令牌吗?@WouterdenOuden当
findIdentityByAccessToken
返回
null
时,身份验证将被拒绝。因此,在它内部执行您需要的任何逻辑(如检查令牌有效性),如果身份验证失败,则返回
null
,或者返回一个
Yii::$app->user->identity
将保持的用户实例,以便您可以在应用程序内的任何位置使用它。检查并获取更多详细信息…您可能还需要构建操作来处理登录、注册等。。。就像这样,我可以用one()做一个查询,如果它没有找到任何东西,它会返回null?如果它找到数据,身份验证就会成功?没错。只需记住,
findIdentityByAccessToken
应该返回
null
user
实例。(请注意,如果未找到用户,默认情况下将返回
null
public static function findIdentityByAccessToken($token, $type = null)
{
    return static::findOne(['auth_key' => $token]);
}