Api Yii2-在前端应用程序上处理用户访问令牌

Api Yii2-在前端应用程序上处理用户访问令牌,api,yii2,yii2-basic-app,yii2-authclient,Api,Yii2,Yii2 Basic App,Yii2 Authclient,我在一个项目中工作,如果用户访问信息正确,API(非OAuth)将返回令牌和过期日期 我有一个使用基本模板应用程序创建的应用程序 现在,在我拿到代币后,我会: ...code to get token Yii::$app->session->set('isGuest', false); Yii::$app->session->set('user', $response->data->profile); 通过这些信息,我可以检查用户是否已登录,并允许其访问站

我在一个项目中工作,如果用户访问信息正确,API(非OAuth)将返回令牌和过期日期

我有一个使用基本模板应用程序创建的应用程序

现在,在我拿到代币后,我会:

...code to get token

Yii::$app->session->set('isGuest', false);
Yii::$app->session->set('user', $response->data->profile);
通过这些信息,我可以检查用户是否已登录,并允许其访问站点的某些区域。坏的一面是我失去了在控制器中使用访问规则的可能性:

'rules' => [
                    [
                        'actions' => ['index', 'view', 'delete'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
有没有办法让我觉得我们已经登录,可以像往常一样使用所有方法


我想我可以使用Webuser,但不确定正确的方法。

您需要设置用户的身份

要成功完成此操作,您应该创建一个扩展了
yii\filters\auth\AuthMethod
的类,该类具有一个公共函数
authenticate($user,$request,$response){}
()

我为JWT令牌创建了一个实现,我的authenticate函数(在验证令牌后)将包含以下行:

$user_id = $token->getClaim('uid');
$identity = $user->login(User::findIdentity($user_id));

return $identity;
然后您可以在控制器中执行类似的操作(我的类称为JWTBearerAuth)

/**
 * @inheritdoc
 */
public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => JWTBearerAuth::className(),
    ];
    return $behaviors;
}
你所有的授权码都能用