我正在寻找身份验证问题的解决方案。去年五月,我只发现一个人(在 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)。
谢谢,
塞尔格