You are here

masquerade实现用户切换

g089h515r806 的头像
Submitted by g089h515r806 on 星期二, 2022-03-29 02:47

有时候正式站点上线了以后,想要切换一下指定用户,查看一下效果,如果创建一个测试帐号,录入测试数据,在正式站点也不方便。对于Drupal用户来说,此时有一个方便的模块可以帮您实现这样的功能,这就是masquerade模块,它允许具有权限的用户,直接切换到给定用户,以给定用户浏览相关功能。除了这个模块以外,Drupal8,9下面还有userswitch模块提供了同样的功能。我们这里介绍masquerade模块。

 

Masquerade英文释义:

[ˌmæskəˈreɪd]

n.伪装;化装舞会;假面舞会

v.冒充

   masquerade模块下载地址:

https://www.drupal.org/project/masquerade

  

   1,下载,解压,上传到modules目录,然后安装这个模块。

2,安装后,在区块管理界面,添加masquerade区块到管理主题的内容区域,

3,(可选)将区块的可见性设置,页面限制在/admin/people,这样在用户管理页面可以看到它。

4,这个时候可以看到这个区块,这个区块是一个表单区块:


   在这里输入用户名,点击切换按钮。

 masquerade.jpg

 

masquerade模块关键代码解读:

protected function switchUser(UserInterface $user) {
    /** @var \Drupal\user\UserInterface $previous */
    $previous = $this->userStorage->load($this->currentUser->id());
    // Call logout hooks when switching from original user.
    $this->moduleHandler->invokeAll('user_logout', [$previous]);
 
    // Regenerate the session ID to prevent against session fixation attacks.
    $this->sessionManager->regenerate();
 
    // Supposed "safe" user switch method https://www.drupal.org/node/218104
    // @todo Use `Drupal::service('account_switcher')` but care about session.
    $this->currentUser->setAccount($user);
    $this->session->set('uid', $user->id());
 
    // Call all login hooks when making user login.
    $this->moduleHandler->invokeAll('user_login', [$user]);
    return $previous;
  }

 

在切换用户的逻辑代码里面,先将当前用户登出,然后使用切换到的用户,重新生成会话信息,实现登录。