我正在Drupal 7安装上获得重定向循环。每当非管理员用户登录时,该站点将在用户配置文件URL上输入重定向循环;例如,http://example.com/?q=user/testuser。
此超链接用户帐户可以访问此URL,并且在注销时尝试访问此URL会返回403拒绝访问权限。
以非管理员用户身份登录时,尝试访问任何URL都将重定向到用户个人资料页面,然后该页面将重定向到自身,从而导致重定向循环重新开始。
我发现,如果我向特定用户授予“管理员”角色,则该用户将停止重定向循环,并且该页面将不再尝试在登录时重定向到用户/%用户名。
我还发现,如果我向用户授予“管理用户”权限,重定向循环将停止,但仍会在登录时将用户重定向到用户/%用户名。
显然,这些解决方案都不可能,因为给予常规用户管理员角色或管理用户的能力是一个巨大的安全风险。
有没有人知道对此的修复,或者通过与用户角色相关的覆盖来解决此问题?
已安装的模块:块,颜色,注释,上下文链接,仪表板,数据库日志记录,字段,字段SQL存储,字段UI,文件,过滤器,帮助,图像,列表,菜单,节点,数量,选项,叠加,路径,RDF,搜索,快捷方式,系统,分类,文本,工具栏,更新管理器,用户,混沌工具(7.x-1.0-alpha4),页面管理器,开发,主题开发人员,Fieldgroup,IMCE,Pathauto,令牌,分类法菜单,IMCE Wysiwyg API桥,Wysiwyg,Webform和几个自定义模块,i)提供块2)提供自定义页面和3)修改默认搜索行为(按节点类型拆分搜索结果)。我的自定义模块都没有与用户管理系统,权限系统或使用用户模块提供的任何功能进行交互。
答案 0 :(得分:3)
我有一个相同的问题...由于我并不是唯一一个面临这个问题的人,我更多地挖了一下。这是你的更新 - 自定义主题。
我确信这可能是由很多不同的因素引起的,但在我的情况下,可能是你的,这是我的template.php错误。
我使用自定义MYTHEME_preprocess_page()
在我的模板中提供了一些自定义变量。其中一个变量显然有点时髦,因为当我删除它时,问题就消失了。事实证明,当我试图将用户注册表单放入页面时,会遗留一些代码。它从来没有奏效,我忘了删除它!
希望这可以帮助那些人回到正轨。
答案 1 :(得分:2)
我没有解决方案,但您可以通过下一个方式进行调查:
1.转到http://SITE/admin/config/development/devel以进行开发模块设置
2.选中“显示重定向页面”并保存设置
3.转到http://SITE/admin/people/permissions
4.选中“访问开发者信息”以获取匿名和其他角色,然后保存
5.尝试登录,它应该停在重定向页面上并显示它尝试重定向的位置,这样你就可以检测到哪些模块调用了循环。
答案 2 :(得分:1)
我还遇到了非管理员用户随机发生的重定向循环问题。查看/admin/reports/dblog
显示了多个节点的权限问题。我通过刷新节点权限来修复它(参见/admin/reports/status/rebuild
)。现在一切都很好。
答案 3 :(得分:1)
对我来说同样的问题,经过几个小时的调试和论坛/博客导航我终于找到了我网站上的内容...
如果您在所有页面中强制使用登录阻止,即使用户已登录,也只有管理员可以导航页面。
这是可能的原因之一,我希望可以帮助别人!
答案 4 :(得分:1)
我遇到了同样的问题,因为我正在加载登录表单,即使用户已登录。只有在用户匿名时才通过不要求表单来修复它。
答案 5 :(得分:0)
来自https://www.drupal.org/node/1793230
在MySQL数据库中运行这些SQL查询。如果你已安装了drush,你可以只是" drush sqlc"从您的设置目录进入MySQL命令行。否则,您可以使用PHPMyAdmin,MySQL工作台或其他一些客户端工具来连接和运行它们:
显示要删除的记录:
SELECT r.rid, r.language, r.source, r.redirect FROM redirect r INNER JOIN url_alias u ON r.source = u.alias AND r.redirect = u.source AND r.language = u.language;
然后,要删除上述查询中显示的重定向,请尝试转到行中显示的页面。有可能你会得到一个重定向循环。然后,在备份db并运行下面的删除后再试一次。你必须在MYSQL Workbench中关闭安全模式才能运行它,所以BACKUP:
DELETE r FROM redirect r INNER JOIN url_alias u ON r.source = u.alias AND r.redirect = u.source AND r.language = u.language;
解决了我的问题,发现其他页面有循环,我甚至都没有意识到!