Symfony手动登录用户

Symfony手动登录用户,symfony,symfony4,fosuserbundle,Symfony,Symfony4,Fosuserbundle,存在一个创建用户实体的页面(这超出了正常的注册流程) 创建用户时,他们应该登录,guardHandler与验证器一起使用,如下所示 use App\Security\FakeAuthenticator; use Symfony\Component\Security\Guard\GuardAuthenticatorHandler; $response = $guardHandler->authenticateUserAndHandleSuccess(

存在一个创建用户实体的页面(这超出了正常的注册流程)

创建用户时,他们应该登录,guardHandler与验证器一起使用,如下所示

use App\Security\FakeAuthenticator;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;

        $response = $guardHandler->authenticateUserAndHandleSuccess(
                $user, // the User object you just created
                $request,
                $authenticator, // authenticator whose onAuthenticationSuccess you want to use
                'main'          // the name of your firewall in security.yaml
        );
但是,验证器很混乱,它只为AuthenticationSuccess上的一个方法创建

use Symfony\Component\Security\Guard\AbstractGuardAuthenticator;

class FakeAuthenticator extends AbstractGuardAuthenticator
{
    public function supports(Request $request)
    {
    return false;
    }

    public function getCredentials(Request $request)
    {
    throw new \RuntimeException('Unreachable code');
    }

    public function getUser($credentials, UserProviderInterface $userProvider)
    {
    throw new \RuntimeException('Unreachable code');
    }

    public function checkCredentials($credentials, UserInterface $user)
    {
    throw new \RuntimeException('Unreachable code');
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
    {

    return null;
    }

    public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
    {
    throw new \RuntimeException('Unreachable code');
    }

    public function start(Request $request, AuthenticationException $authException = null)
    {
    throw new \RuntimeException('Unreachable code');
    }

    public function supportsRememberMe()
    {
    return true;
    }
}
必须实现很多方法,因为方法
handleAuthenticationSuccess
需要一个实现
AuthenticatorInterface
的类

代码正常,用户已登录,但感觉它不是最干净的解决方案,是否有其他方法登录用户

FosUserBundle正在项目中使用,下面的方法确实有效,但我不确定是否支持在loginManager上调用方法,我在文档中找不到任何内容,我不希望我的代码依赖于可能更改的功能

\FOS\UserBundle\Security\LoginManagerInterface::logInUser('main', $user, $response);

我决定使用
loginManager
及其公共方法
logInUser
,这是最干净的解决方案,无需为单个方法创建额外的类

use FOS\UserBundle\Security\LoginManager;

...

public function createUserInControllerAction(LoginManagerInterface $loginManager): Response
{
    $user = new User(); // create user however you like

    $loginManager->logInUser('main', $user, $response);

    return $this->json(['success']);
}