Php Can';t使登录路径在Symfony 2中工作
我已经在每本手册上尝试了所有配置,但仍然无法使其正常工作! 有人能帮我找到错误吗?这是我的密码: Security.ymlPhp Can';t使登录路径在Symfony 2中工作,php,security,login,symfony,Php,Security,Login,Symfony,我已经在每本手册上尝试了所有配置,但仍然无法使其正常工作! 有人能帮我找到错误吗?这是我的密码: Security.yml security: encoders: Symfony\Component\Security\Core\User\User: plaintext role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALL
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
main:
pattern: ^/
provider: in_memory
anonymous: true
security: true
form_login:
login_path: default_login
check_path: default_check
logout:
path: default_logout
target: default_index
remember_me:
key: %secret%
lifetime: 3600
domain: ~
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
#- { path: ^/afiliados, roles: ROLE_SUPER_ADMIN}
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
#- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
namespace Epika\ClubBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;
/**
* Default controller.
*
*/
class DefaultController extends Controller
{
/**
* @Route("/login", name="default_login")
* @Template()
*/
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error
);
}
/**
* @Route("/login_check", name="default_check")
*
*/
public function loginCheckAction()
{
//Security Layer
}
/**
* @Route("/logout", name="default_logout")
*/
public function logoutAction()
{
//Security Layer
}
}
DefaultController.php
namespace Epika\ClubBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;
/**
* Default controller.
*
*/
class DefaultController extends Controller
{
/**
* @Route("/login", name="default_login")
* @Template()
*/
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
}
return array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error
);
}
/**
* @Route("/login_check", name="default_check")
*
*/
public function loginCheckAction()
{
//Security Layer
}
/**
* @Route("/logout", name="default_logout")
*/
public function logoutAction()
{
//Security Layer
}
}
以我的形式,我有
<form name="loginForm" action="{{ path('default_check') }}" method="POST" enctype="text/plain">
<input type="text" name="_username" placeholder="Nombre de Usuario" />
<input type="password" name="_password" placeholder="Tú Contraseña" />
<input type="checkbox" name="_remember_me" />
<input type="hidden" name="_target_path" value="/index" />
<a href="javascript:submit()"><img src="{{ asset('bundles/epikaclub/images/entrar.png') }}" /></a>
<script type="text/javascript">
function submit()
{
document.loginForm.submit();
}
</script>
函数提交()
{
document.loginForm.submit();
}
好的,伙计们,非常感谢你们的帮助,问题是登录表单enctype设置为
<form name="loginForm" action="{{ path('login_check') }}" method="post" enctype="text/plain">
这导致请求为空:很抱歉,一旦我将其设置为
<form name="loginForm" action="{{ path('login_check') }}" method="post" enctype="application/x-www-form-urlencoded">
它工作得很好,现在我必须与条令实体提供者检查它,看看它是如何运行的:D您可能需要调整您的登录路径,并检查路径值是否为实际的URL路径,如下所示:
firewalls:
[...]
main:
[...]
form_login:
login_path: /login
check_path: /login_check
Sam与其他选项不同,
检查路径
不支持路由名称。将其设置为类似于/login\u check
的路径我相信您需要:
- 使用实际的URL(就像其他人在这里说的那样,即“/login\u check”)
- 不要为登录检查路由创建控制器。我甚至不认为这条路线本身是必要的。Symfony2将看到“/login\u check”请求并自动拦截它
“坏凭证”错误,即使在输入正确的信息时,也只是指向某个地方发生的错误。检查错误日志,如果它仍然不能与我上面提到的工作,并让我们知道 我这样做了,我一直收到错误的凭据消息,但是当我使用路由名称时,我得到一个异常,说登录检查路由与防火墙的模式不匹配:s,所以我有点困惑>>使用URL是正确的方法-错误可能只是会话中需要清除的某个错误?即使成功登录并注销,您仍然会收到错误消息吗?我从未成功登录,它只会始终将我发送回带有错误凭据消息的登录页面,即使我使用了一个好的组合,我也会编辑它,并且我不会一直返回带有错误凭据消息的登录页面,会不会是会议中出了什么问题?我需要配置其他东西吗?由于调试,我发现重定向到login_检查是使用我在登录表单中提供的数据进行的,但不知何故会话没有得到修改或存储,我该怎么办??