有时候正式站点上线了以后,想要切换一下指定用户,查看一下效果,如果创建一个测试帐号,录入测试数据,在正式站点也不方便。对于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模块关键代码解读:
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; }
在切换用户的逻辑代码里面,先将当前用户登出,然后使用切换到的用户,重新生成会话信息,实现登录。