1

我正在寻找身份验证问题的解决方案。去年五月,我只发现一个人(在 symfony-users Google 组中)有同样的问题(底部的#2)。据我所知,没有将解决方案发布到列表中。

在我的 Mac OS X 开发环境中,sfDoctrineGuardPlugin 工作正常。当我尝试访问安全页面时,我被重定向到登录。当我输入有效凭据时,我会被重定向回最初请求的页面。

在我在 DreamHost 的测试环境中,它无法正常工作。当我尝试访问安全页面时,我被重定向到登录。当我输入有效凭据时,我会被重定向回最初请求的页面,但 symfony 会丢失我的身份验证状态并(重新)将我重定向回再次登录,并清空表单。(相比之下,如果我输入了无效的凭据,那么我会在登录页面上收到一条错误消息,并且用户名仍然填写。)

在每个环境中,symfony 都会验证我的凭据是否有效并且我具有“管理员”权限,但是一旦将我重定向回我请求的页面,测试就会忘记这些凭据。

apache 错误日志中没有显示任何有趣的内容。

开发日志片段:

Feb 09 10:05:51 symfony [info] {sfPatternRouting} 匹配路由“report” (/report.:sf_format) 为 /report 参数数组 ('module' => 'report', 'action' => 'index' , 'sf_format' => 'html',)
Feb 09 10:05:52 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 10:05:52 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 10:05:52 symfony [info] {sfFilterChain} 执行过滤器“sfBasicSecurityFilter”
Feb 09 10:05:52 symfony [info] {sfBasicSecurityFilter} 操作“report/index”需要身份验证,转发到“sfGuardAuth/signin”
Feb 09 10:05:52 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 10:05:52 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 10:05:52 symfony [info] {sfFilterChain} 执行过滤器“sfExecutionFilter”
2 月 9 日 10:05:52 symfony [info] {sfGuardAuthActions} 调用“sfGuardAuthActions->executeSignin()”
Feb 09 10:05:52 symfony [info] {sfPHPView} 渲染“/Library/WebServer/WebSites/Documents/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php”
Feb 09 10:05:52 symfony [info] {sfPartialView} 渲染“/Library/WebServer/WebSites/Documents/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/_signin_form.php”
Feb 09 10:05:52 symfony [info] {sfPHPView} 用“/Library/WebServer/WebSites/Documents/apps/backend/templates/layout.php”装饰内容
2 月 9 日 10:05:52 symfony [info] {sfPHPView} 渲染“/Library/WebServer/WebSites/Documents/apps/backend/templates/layout.php”
Feb 09 10:05:52 symfony [info] {sfWebResponse} 发送状态“HTTP/1.1 401 Unauthorized”
2 月 9 日 10:05:52 symfony [info] {sfWebResponse} 发送标头“Content-Type: text/html; charset=utf-8”
Feb 09 10:05:52 symfony [info] {sfWebDebugLogger} 配置 12.62 ms (12)
Feb 09 10:05:52 symfony [info] {sfWebDebugLogger} 工厂 58.15 ms (1)
Feb 09 10:05:52 symfony [info] {sfWebDebugLogger} Action "sfGuardAuth/signin" 6.18 ms (1)
Feb 09 10:05:52 symfony [info] {sfWebDebugLogger} 查看“sfGuardAuth/signin”的“成功” 13.92 ms (1)
2 月 9 日 10:05:52 symfony [info] {sfWebDebugLogger} 部分“sfGuardAuth/_signin_form”4.84 ms (1)
Feb 09 10:05:52 symfony [info] {sfWebResponse} 发送内容 (53797 o)
Feb 09 10:06:04 symfony [info] {sfPatternRouting} 为 /login 匹配路由“sf_guard_signin”(/login)和参数数组('module' => 'sfGuardAuth', 'action' => 'signin',)
Feb 09 10:06:04 symfony [info] {sfGuardSecurityUser} 用户已通过身份验证
Feb 09 10:06:04 symfony [info] {sfGuardSecurityUser} 添加凭据“admin”
2 月 9 日 10:06:04 symfony [info] {sfFrontWebController} 重定向到“http://localhost/backend_dev.php/”
2 月 9 日 10:06:04 symfony [info] {sfWebResponse} 发送状态“HTTP/1.1 302 Found”
2 月 9 日 10:06:04 symfony [info] {sfWebResponse} 发送标头“位置:http:/localhost/backend_dev.php/”
2 月 9 日 10:06:04 symfony [info] {sfWebResponse} 发送标头“Content-Type: text/html; charset=utf-8”
Feb 09 10:06:04 symfony [info] {sfWebDebugLogger} 配置 1.30 ms (8)
Feb 09 10:06:04 symfony [info] {sfWebDebugLogger} 工厂 58.35 ms (1)
Feb 09 10:06:04 symfony [info] {sfWebDebugLogger} Action "sfGuardAuth/signin" 217.06 ms (1)
Feb 09 10:06:04 symfony [info] {sfWebDebugLogger} Database (Doctrine) 0.03 ms (5)
Feb 09 10:06:04 symfony [info] {sfWebResponse} 发送内容 (123 o)
2 月 9 日 10:06:04 symfony [info] {sfPatternRouting} 匹配路由“主页”(/)为 / 参数数组('module' => 'report', 'action' => 'index',)
Feb 09 10:06:04 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 10:06:04 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 10:06:04 symfony [info] {sfFilterChain} 执行过滤器“sfBasicSecurityFilter”
Feb 09 10:06:04 symfony [info] {sfFilterChain} 执行过滤器“sfExecutionFilter”
2 月 9 日 10:06:04 symfony [info] {reportActions} 调用“reportActions->executeIndex()”
2 月 9 日 10:06:04 symfony [info] {sfPHPView} 渲染“/Library/WebServer/WebSites/Documents/apps/backend/modules/report/templates/indexSuccess.php”
2 月 9 日 10:06:05 symfony [info] {main} 调用“navigation->executeNavMenu()”
2 月 9 日 10:06:05 symfony [info] {sfWebResponse} 发送状态“HTTP/1.1 200 OK”
2 月 9 日 10:06:05 symfony [info] {sfWebResponse} 发送标头“Content-Type: text/html; charset=utf-8”
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} 配置 1.93 ms (10)
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} 工厂 60.49 ms (1)
2 月 9 日 10:06:05 symfony [info] {sfWebDebugLogger} Action "report/index" 66.68 ms (1)
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} 数据库(Doctrine)0.02 ms (3)
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} 查看“报告/索引”的“成功”454.39 ms (1)
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} 组件“navigation/navMenu”0.17 ms (1)
Feb 09 10:06:05 symfony [info] {sfWebDebugLogger} 部分“navigation/_navMenu”19.78 ms (1)
Feb 09 10:06:05 symfony [info] {sfWebResponse} 发送内容 (164075 o)

测试日志片段:

Feb 09 06:21:36 symfony [info] {sfPatternRouting} 匹配路由“report” (/report.:sf_format) 为 /report 参数数组 ('module' => 'report', 'action' => 'index' , 'sf_format' => 'html',)
Feb 09 06:21:36 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 06:21:36 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 06:21:36 symfony [info] {sfFilterChain} 执行过滤器“sfBasicSecurityFilter”
Feb 09 06:21:36 symfony [info] {sfBasicSecurityFilter} 操作“report/index”需要身份验证,转发到“sfGuardAuth/signin”
Feb 09 06:21:36 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 06:21:36 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 06:21:36 symfony [info] {sfFilterChain} 执行过滤器“sfExecutionFilter”
2 月 9 日 06:21:36 symfony [info] {sfGuardAuthActions} 调用“sfGuardAuthActions->executeSignin()”
Feb 09 06:21:36 symfony [info] {sfPHPView} 渲染“/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php”
Feb 09 06:21:36 symfony [info] {sfPartialView} 渲染“/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/_signin_form.php”
Feb 09 06:21:36 symfony [info] {sfPHPView} 用“/home/username/test.example.com/project/apps/backend/templates/layout.php”装饰内容
Feb 09 06:21:36 symfony [info] {sfPHPView} 渲染“/home/username/test.example.com/project/apps/backend/templates/layout.php”
Feb 09 06:21:36 symfony [info] {sfWebDebugLogger} 配置 822.85 ms (12)
Feb 09 06:21:36 symfony [info] {sfWebDebugLogger} 工厂 343.18 ms (1)
Feb 09 06:21:36 symfony [info] {sfWebDebugLogger} Action "sfGuardAuth/signin" 7.63 ms (1)
Feb 09 06:21:36 symfony [info] {sfWebDebugLogger} 查看“sfGuardAuth/signin”的“成功”19.09 ms (1)
2 月 9 日 06:21:36 symfony [info] {sfWebDebugLogger} 部分“sfGuardAuth/_signin_form”4.44 ms (1)
Feb 09 06:21:36 symfony [info] {sfWebResponse} 发送内容 (52356 o)
Feb 09 06:21:45 symfony [info] {sfPatternRouting} 为 /login 匹配路由“sf_guard_signin”(/login)和参数数组('module' => 'sfGuardAuth', 'action' => 'signin',)
Feb 09 06:21:45 symfony [info] {sfGuardSecurityUser} 用户已通过身份验证
Feb 09 06:21:45 symfony [info] {sfGuardSecurityUser} 添加凭据“admin”
Feb 09 06:21:45 symfony [info] {sfFrontWebController} 重定向到“http://test.rippil.com/backend_dev.php/”
Feb 09 06:21:45 symfony [info] {sfWebDebugLogger} 配置 21.18 ms (8)
Feb 09 06:21:45 symfony [info] {sfWebDebugLogger} 工厂 162.69 ms (1)
Feb 09 06:21:45 symfony [info] {sfWebDebugLogger} Action "sfGuardAuth/signin" 233.96 ms (1)
Feb 09 06:21:45 symfony [info] {sfWebDebugLogger} Database (Doctrine) 0.03 ms (7)
Feb 09 06:21:45 symfony [info] {sfWebResponse} 发送内容 (118 o)
2 月 9 日 06:21:46 symfony [info] {sfPatternRouting} 匹配路由“主页”(/) 用于 / 带有参数数组 ('module' => 'reporttt', 'action' => 'index',)
Feb 09 06:21:46 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 06:21:46 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 06:21:46 symfony [info] {sfFilterChain} 执行过滤器“sfBasicSecurityFilter”
Feb 09 06:21:46 symfony [info] {sfBasicSecurityFilter} 操作“report/index”需要身份验证,转发到“sfGuardAuth/signin”
Feb 09 06:21:46 symfony [info] {sfFilterChain} 执行过滤器“sfRenderingFilter”
Feb 09 06:21:46 symfony [info] {sfFilterChain} 执行过滤器“sfGuardRememberMeFilter”
Feb 09 06:21:46 symfony [info] {sfFilterChain} 执行过滤器“sfExecutionFilter”
2 月 9 日 06:21:46 symfony [info] {sfGuardAuthActions} 调用“sfGuardAuthActions->executeSignin()”
Feb 09 06:21:46 symfony [info] {sfPHPView} 渲染“/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php”
Feb 09 06:21:46 symfony [info] {sfPartialView} 渲染“/home/username/test.example.com/project/plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/templates/_signin_form.php”
Feb 09 06:21:46 symfony [info] {sfPHPView} 用“/home/username/test.example.com/project/apps/backend/templates/layout.php”装饰内容
Feb 09 06:21:46 symfony [info] {sfPHPView} 渲染“/home/username/test.example.com/project/apps/backend/templates/layout.php”
Feb 09 06:21:46 symfony [info] {sfWebDebugLogger} 配置 13.92 ms (12)
Feb 09 06:21:46 symfony [info] {sfWebDebugLogger} 工厂 251.75 ms (1)
Feb 09 06:21:46 symfony [info] {sfWebDebugLogger} Action "sfGuardAuth/signin" 31.00 ms (1)
Feb 09 06:21:46 symfony [info] {sfWebDebugLogger} 查看“sfGuardAuth/signin”的“成功” 57.79 ms (1)
Feb 09 06:21:46 symfony [info] {sfWebDebugLogger} 部分“sfGuardAuth/_signin_form” 8.09 ms (1)
Feb 09 06:21:46 symfony [info] {sfWebResponse} 发送内容 (52428 o)

可能值得一提的是 backend/templates/layout.php 中的这个片段,它解释了 Dev 中的 navigation/_navMenu 行,但不在测试中:
<?php if ($sf_user->isAuthenticated()): ?>
    <?php include_component('navigation', 'navMenu'); ?>
    ...
 <?php endif ?>

symfony-users 组中的相关帖子:

您应该检查 symfony 和 apache 的日志。

加布里埃尔

5 月 28 日下午 2:33,sdwdd 写道:

大家好。

Symfony 1.4 安装有几个问题:
1. [无关]
2. sfGuard 插件的问题。
它在开发环境中可以正常工作,但是在用户登录后在测试环境中它会丢失会话。用户登录,但在页面重新加载后,身份验证会话丢失。

安装是带有 sfGuardPlugin 和一些自定义模板的核心 Symfony 1.4。

对这些有什么想法吗?我觉得服务器配置有问题,但是不知道可能出了什么问题(将 memory_limit 提高到 512Mb)。

谢谢,
塞尔格

4

1 回答 1

0

在 symfony-users Google 组的提示后,我找到了答案。

第一个提示:

这似乎是您服务器上的会话的问题。如果不存储会话变量,则无法保存身份验证状态。您应该询问 Dreamhost 支持以了解为什么会话变量不起作用。

克里斯托夫 | 斯托夫

第二个提示:

这不是与 symfony 相关的建议。
我经常发现会话问题是由许多基于 Ubuntu 的主机附带的 suhosin 模块引起的。尝试关闭会话加密,看看是否有帮助。例如,我发现有时文档根目录是加密的一部分,它可能并不总是按预期工作。
HTH
亲切的问候,
Jochen Daum

事实证明,我的托管环境使用了 suhosin 强化的 PHP,这可能是问题的原因。将 suhosin 添加到我的解决方案搜索中,我在 oldforums.symfony-project.org 中找到了这个:

回复:用户会话不会在 Ubuntu 服务器上持续存在 [消息 #100928 是对消息 #100918 的回复]
2010 年 6 月 14 日星期一 19:33 dklanac
这是我的最后一篇文章。我发现问题仅在我的测试环境中。sfSessionTestStorage 没有设置我需要的 cookie。我将其更改为 sfSessionStorage 并使用“测试”后缀重命名我的 cookie 以防止生产 cookie 冲突,并且事情表现得很好。这也可以解释为什么我能够在我的开发实例上看到正确的行为,因为它也使用常规的 sfSessionStorage 类。

我们为开发、测试、阶段和生产使用单独的子域,因此我的解决方案更加简单。我刚刚在 apps/appname/config/factories.yml 中将 sfSessionTestStorage 更改为 sfSessionStorage。我不希望需要更改 cookie 名称。

于 2011-02-10T17:47:06.847 回答