Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
symfony3 guard登录表单不';不认证_Symfony_Guard - Fatal编程技术网

symfony3 guard登录表单不';不认证

symfony3 guard登录表单不';不认证,symfony,guard,Symfony,Guard,我尝试使用guard(symfony 3.2)进行表单登录身份验证,但它不起作用。 身份验证正在工作,但当我被重定向到主页(accueil)时,我会被重定向到登录页面,而不带图标。 如果我把我的主页的控件 $user = $this->get('security.token_storage')->getToken(); dump($user); die; 我可以看到我的用户,角色,但他没有经过身份验证 DashboardController.php on line 23: Post

我尝试使用guard(symfony 3.2)进行表单登录身份验证,但它不起作用。 身份验证正在工作,但当我被重定向到主页(accueil)时,我会被重定向到登录页面,而不带图标。
如果我把我的主页的控件

$user = $this->get('security.token_storage')->getToken();
dump($user); die;
我可以看到我的用户,角色,但他没有经过身份验证

DashboardController.php on line 23:
PostAuthenticationGuardToken {#133 ▼
 -providerKey: "main"
 -user: User {#457 ▶}
 -roles: array:1 [▼
   0 => Role {#120 ▼
     -role: "ROLE_SUPERADMIN"
   }
  ]    
-authenticated: false
-attributes: []
}
_sf2_attributes|a:1:{s:26:"_security.main.target_path";s:29:"http://localhost:8000/accueil";}_sf2_flashes|a:0:{}_sf2_meta|a:3:{s:1:"u";i:1488245179;s:1:"c";i:1488244922;s:1:"l";s:1:"0";}
我错过了什么

Security.ym

security:
encoders:
  EntBundle\Entity\User\User:
    algorithm: bcrypt

providers:
    database:
        entity:
          class: EntBundle:User\User
          property: username

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern:    ^/
        anonymous: ~
        logout: ~
        guard:
          authenticators:
            - ent.login_authenticator
TestAuthenticator.php

namespace EntBundle\Security;

use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Guard\AbstractGuardAuthenticator;

class TestAuthenticator extends AbstractGuardAuthenticator
{
private $em;
private $router;

public function __construct(EntityManager $em, RouterInterface $router)
{
    $this->em = $em;
    $this->router = $router;
}

public function getCredentials(Request $request)
{
    if ($request->getPathInfo() != '/login' || !$request->isMethod('POST'))     {
        return;
    }

    return [
        'username' => $request->request->get('_username'),
        'password' => $request->request->get('_password'),
    ];
}

public function getUser($credentials, UserProviderInterface $userProvider)
{
    $username = $credentials['username'];
    return $this->em->getRepository('EntBundle:User\User')->findOneBy(['username' => $username]);
}

public function checkCredentials($credentials, UserInterface $user)
{
  // this is just for test  
  return true;
}

public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    $request->getSession()->set(Security::AUTHENTICATION_ERROR, $exception);
    $url = $this->router->generate('login');
    return new RedirectResponse($url);
}

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
    $url = $this->router->generate('accueil');
    return new RedirectResponse($url);
}

public function start(Request $request, AuthenticationException $authException = null)
{
    $url = $this->router->generate('login');
    return new RedirectResponse($url);
}

public function supportsRememberMe()
{
    return false;
}
}
DashboardController.php

namespace EntBundle\Controller\Dashboard;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;


class DashboardController extends Controller
{
/**
 * @Route("/accueil", name="accueil")
 */
public function indexAction()
{
    $user = $this->get('security.token_storage')->getToken();
    dump($user); die;
    return   $this->render('EntBundle:dashboard:dashboard_structure.html.twig');
}


/**
 * @Route("/login", name="login")
 */
public function loginAction()
{
    $authenticationUtils = $this->get('security.authentication_utils');
    $error = $authenticationUtils->getLastAuthenticationError();
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('EntBundle::login.html.twig', [
        'last_username' => $lastUsername,
        'error' => $error,
    ]);
}

/**
 * @Route("/logout", name="logout")
 */
public function logoutAction()
{
}
}
编辑:
感谢leo_ap的帮助,但问题并非来自于此。
配置会话如下所示:

session:
     handler_id:  session.handler.native_file
     save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"
如果我签入savepath文件夹,我已经创建了会话文件,但没有经过身份验证

DashboardController.php on line 23:
PostAuthenticationGuardToken {#133 ▼
 -providerKey: "main"
 -user: User {#457 ▶}
 -roles: array:1 [▼
   0 => Role {#120 ▼
     -role: "ROLE_SUPERADMIN"
   }
  ]    
-authenticated: false
-attributes: []
}
_sf2_attributes|a:1:{s:26:"_security.main.target_path";s:29:"http://localhost:8000/accueil";}_sf2_flashes|a:0:{}_sf2_meta|a:3:{s:1:"u";i:1488245179;s:1:"c";i:1488244922;s:1:"l";s:1:"0";}
如果我尝试使用security.yml的正常登录表单,它工作正常…
我尝试使用handler\u id并将\u路径保存为null,但没有成功

编辑2:
我发现了为什么我总是被重定向到登录页面,因为我已经注销了

[2017-02-28 09:16:34] security.INFO: The security token was removed due to an AccountStatusException. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AuthenticationExpiredException(code: 0):  at /home/philippe/Documents/symfony/vendor/symfony/symfony/src/Symfony/Component/Security/Guard/Provider/GuardAuthenticationProvider.php:86)"}
和GuardAuthenticationProvider.php(86)


但是为什么呢?

可能是您的会话没有持久化令牌。检查您的会话配置,内部:
config.yml
。在
框架
选项中,有
会话
。查看如何配置
处理程序id
保存路径。可能是您的php安装无法处理配置路径上的会话。尝试将null设置为
handler\u id
save\u path
以强制php使用自己的内置配置来处理会话

config.yml文件:

framework:

    { .. Other configurations ..}

    session:
        handler_id:  null
        save_path:   null

    { .. More configurations ..}

可能是您的会话没有持久化令牌。检查您的会话配置,内部:
config.yml
。在
框架
选项中,有
会话
。查看如何配置
处理程序id
保存路径。可能是您的php安装无法处理配置路径上的会话。尝试将null设置为
handler\u id
save\u path
以强制php使用自己的内置配置来处理会话

config.yml文件:

framework:

    { .. Other configurations ..}

    session:
        handler_id:  null
        save_path:   null

    { .. More configurations ..}

你好,利奥·阿普。看我的编辑…你好,利奥。查看我的编辑。。。