如何在Yii2中更改当前用户

Cly*_*yff 1 login yii2

我仍然是yii2中的新手,我正在尝试让我的管理员用户能够切换到另一个用户,这样他就可以看到与这些用户完全相同的页面(如果他们报告任何问题/错误).

我找到了switchIdentity()方法,但我无法弄清楚如何调用它$identity.

顺便说一下,你们认为这是管理员检查"用户视图"或任何人有更好想法的最佳方式吗?

Cly*_*yff 16

好的,我找到了解决方案.我们只需要我们要登录的用户的id.我打过电话$id.

$initialId = Yii::$app->user->getId(); //here is the current ID, so you can go back after that.
if ($id == $initialId) {
    //Same user!
} else {
    $user = User::findOne($id);
    $duration = 0;
    Yii::$app->user->switchIdentity($user, $duration); //Change the current user.
    Yii::$app->session->set('user.idbeforeswitch',$initialId); //Save in the session the id of your admin user.
    return $this->render('index'); //redirect to any page you like.
}
Run Code Online (Sandbox Code Playgroud)

现在我们更改了用户,我们只需要检查会话是否存储了管理员ID.如果可以,可以调用某些操作返回原始用户.像这样:

$originalId = Yii::$app->session->get('user.idbeforeswitch');
if ($originalId) {
    $user = User::findOne($originalId);
    $duration = 0;
    Yii::$app->user->switchIdentity($user, $duration);
    Yii::$app->session->remove('user.idbeforeswitch');
}
return $this->render('index');
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人,抱歉我不知道如何在评论中正确编辑代码.

  • 感谢您回答自己的问题.正在寻找这个! (2认同)