You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 8登录后重定向至内部URL问题求助

Drupal 8登录后重定向403问题解决

问题原因

你直接调用$response->send()会强制立即触发跳转,跳过了Drupal登录流程中的会话权限初始化和权限验证环节。哪怕管理员实际有权限访问目标页面,系统还没完成用户权限的加载确认,就被强制跳转,因此返回"Access denied"错误。

解决方案

方案一:使用Drupal目标路径服务(推荐)

利用Drupal内置的重定向机制,设置登录后的目标路径,让系统按正常流程完成权限验证后再跳转:

use Drupal\Core\Url;

function mymodule_user_login($account) {
  // 替换为你的仪表盘页面对应的路由名称(优先用路由名而非硬编码URI)
  $url = Url::fromRoute('your_dashboard_route_name');
  // 设置登录后跳转的目标路径
  \Drupal::service('redirect.destination')->set($url->toString());
}

如何查找路由名称:

  • 访问仪表盘页面,查看页面源代码,找带有data-drupal-link-system-path的元素,对应路由可通过Drush命令drush routes-list搜索路径获取;
  • 或在模块的routing.yml文件中查找仪表盘页面的路由定义。

方案二:通过Drupal内核处理响应

如果必须使用RedirectResponse,不要直接调用send(),而是把响应交给Drupal内核处理:

use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\RedirectResponse;

function mymodule_user_login($account) {
  $url = Url::fromRoute('your_dashboard_route_name');
  $response = new RedirectResponse($url->toString());
  // 将响应注入请求属性,由Drupal内核完成后续流程
  \Drupal::request()->attributes->set('_controller_result', $response);
}

额外注意事项

  • 避免硬编码internal:/dashboard-overview这类URI,使用路由名称更健壮,后续路径变更时无需修改代码;
  • 确认仪表盘页面的路由权限配置正确,确保管理员及目标用户组拥有访问该页面的权限。

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:55:20