使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)相关的知识,希望对你有一定的参考价值。
我正在使用Symfony进行项目,并且我一直试图让登录在生产服务器上工作,过去2天没有成功。我一直在收到错误
由于系统问题,无法处理身份验证请求。
我已按照此处的指南(http://symfony.com/doc/current/cookbook/security/entity_provider.html)设置从数据库加载用户。
我的security.yml文件:
security:
encoders:
SymfonyComponentSecurityCoreUserUser: plaintext
AcceptmeUserBundleEntityUser: plaintext
role_hierarchy:
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
patricia:
password: patricia
roles: 'ROLE_ADMIN'
users:
name: user_provider
entity: { class: AcceptmeUserBundle:User, property: username }
firewalls:
user_area:
pattern: ^/
anonymous: ~
provider: user_provider
form_login:
login_path: login_route
check_path: _login_check
default_target_path: homepage
dev:
pattern: ^/(_(profiler|wdt|error)|css|images|js)/
security: false
default:
anonymous: ~
http_basic: ~
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
我的SecurityController.php:
namespace AppBundleController;
use SymfonyComponentHttpFoundationRequest;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SymfonyBundleFrameworkBundleControllerController;
use SensioBundleFrameworkExtraBundleConfigurationTemplate;
use SensioBundleFrameworkExtraBundleConfigurationSecurity;
use SymfonyComponentSecurityCoreSecurityContext;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login_route")
* @Template("security/login.html.twig")
*/
public function loginAction(Request $request)
{
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $request->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
'last_username' => $request->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error,
);
}
/**
* @Route("/login_check", name="_login_check")
*/
public function securityCheckAction()
{
// this controller will not be executed,
// as the route is handled by the Security system
}
}
我尝试在2个不同的网络主机(FatCow和GoDaddy)上传项目,问题仍然存在。本地我使用PHP 5.4.19(FatCow使用5.3.2,GoDaddy使用5.4.37)。请记住,使用XAMPP在localhost上工作时一切正常!
我已经确认在这两种情况下都启用了PDO。我已经确认参数.yml文件中的数据库用户名,密码和主机是正确的。本地和远程服务器上的错误日志都不显示。
我已经按照上一篇文章Deploying Symfony2 app getting fosuserbundle errors的所有指示,仍然没有成功。
我提前感谢所有的帮助。
它看起来像是错误:
由于系统问题,无法处理身份验证请求。
是太通用了,并没有告诉问题在哪里(关于这个问题here有一个问题)。
我通过检查日志解决了我的问题,看看发生了什么(在var/logs/dev.log
),希望这有助于某人。
在我的特定情况下,parameters.yml中有关于数据库连接的错误参数。但是,同样,错误过于通用,并不一定意味着问题与数据库连接有关。
在我的情况下,通过纠正.env
文件中的连接细节中的拼写错误来解决该问题。
更新:问题已解决。问题是实体php文件中的表以大写字母命名,而数据库表以小写字母命名。 +1到ClémentBERTILLON指向正确的方向,即prod.log
这个问题可以修复运行命令:php bin/console cache:clear --env=prod --no-debug
AS @ShinDarth提到它。它过于通用,日志检查将帮助我们的人员解决这个问题。
如果它可以帮助我的情况它是:
在SF3中安装SonataUserBundle后,我不得不这样做
bin/console doctrine:schema:update --force
我的上下文是特别的,我之前已经安装并使用过FOSUserBundle来安装SonataUserBundle。 (由于SF3与FOSUser / SonataUSer的兼容性......数据库之后已经进行了16次查询。工作得很好。
目前在Symfony和生产IF中存在一个错误,在身份验证系统发生错误时(缺少表,缺少列或任何其他异常) - 它被记录为INFO而不是ERROR,并且默认错误记录选项根本没有记录。
https://github.com/symfony/symfony/pull/28462
我认为现在有两个选项 - 临时记录生产中的所有内容(包括INFO),直到找到真正的错误。
第二个选项:在生产中直接使用此补丁或调试。
这个解决方案对我来说是正确的:https://stackoverflow.com/a/39782535/2400373
但是如果您无法访问终端,则可以进入服务器并删除var/cache
内的文件夹。
如果您有权访问控制台,则另一种解决方案是键入
#rm -rf var/cache/*
要么
$sudo rm -rf var/cache/*
这个解决方案适用于symfony 3
我确定这个错误太通用了。在我的情况下,以下是不正确的:
class: App/Entity/User;
更正:
class: AppEntityUser;
另一个可能的原因可能是mysql Server。在我的情况下,我忘了启动MAMP / MySQL服务器和Symfony导致此消息。
您可能使用了Symfony docs here提供的模板:
{% if error %}
<div class="alert alert-danger">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
这实际上给你这个错误信息。解决此问题的最简单可靠的方法是使用以下内容替换此行:
<div class="alert alert-danger">{{ error }}</div>
这将为您提供错误的完整堆栈跟踪,并(希望)帮助您调试应用程序。在开始生产之前别忘了还原它!
以上是关于使用Symfony框架在生产服务器上登录失败(由于...无法处理身份验证请求)的主要内容,如果未能解决你的问题,请参考以下文章
生产环境中的 Symfony 2 Assetic css 和 js 404