0

我在一个项目中工作,如果用户访问信息正确,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' => ['@'],
                    ],
                ],

有没有办法让 Yii 认为我们已经登录并能够像往常一样使用所有方法?

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

4

1 回答 1

0

您需要设置用户的身份。

要成功地做到这一点,您应该创建一个扩展yii\filters\auth\AuthMethod了具有公共函数authenticate($user, $request, $response) {}( doc ) 的类。

我为 JWT 令牌创建了一个实现,并且我的身份验证函数将(在验证令牌之后)具有以下几行:

$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;
}

您的所有授权码都可以使用。

于 2018-07-27T13:58:30.407 回答