Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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
Php 自定义用户提供程序中的名称_Php_Security_Symfony - Fatal编程技术网

Php 自定义用户提供程序中的名称

Php 自定义用户提供程序中的名称,php,security,symfony,Php,Security,Symfony,我想在没有数据库的情况下管理我的用户,并检查他们的JWT 我使用和一个定制服务来验证我的JWT 我甚至想使用自定义,如果用户没有JWT,我想重定向到新页面或调用异常 这是我的密码 class WebserviceUserProvider implements UserProviderInterface { /** * @var \Symfony\Component\Routing\RouterInterface */ private $router; private $

我想在没有数据库的情况下管理我的用户,并检查他们的JWT

我使用和一个定制服务来验证我的JWT

我甚至想使用自定义,如果用户没有JWT,我想重定向到新页面或调用异常

这是我的密码

class WebserviceUserProvider implements UserProviderInterface {

  /**
   * @var \Symfony\Component\Routing\RouterInterface
   */
  private $router;
  private $requestStack;

  /**
   * WebserviceUserProvider constructor.
   * @param RequestStack $router
   */
  public function __construct($router,RequestStack $requestStack) {
    $this->router = $router;
    $this->requestStack = $requestStack;
  }

  public function refreshUser(UserInterface $user) {
    if (!$user instanceof User) {
      throw new UnsupportedUserException(
              sprintf('Instances of "%s" are not supported.', get_class($user))
      );
    }

    return $this->loadUserByUsername($user->getUsername());
  }

  public function loadUserByUsername($username) {

    if (!$token = $this->requestStack->getCurrentRequest()->headers->get('Authorization') ?: $this->requestStack->getCurrentRequest()->query->get('token')) {
      throw new UsernameNotFoundException('Could not find user. Sorry!');
    }

    $user = new \AppBundle\Entity\User('MyUsername');
    $user->setJwtToken($token);
    return $user;
  }

  public function supportsClass($class) {
    return $class === 'AppBundle\Security\User\WebserviceUser';
  }


}
这是我的服务

app.webservice_user_provider:
    class: AppBundle\Security\WebserviceUserProvider
    arguments: ['@router','@request_stack']
还有我的安全

user-providers
    providers:
        webservice:
            id: app.webservice_user_provider
当我在queryString中访问带有令牌的url时

http://127.0.0.1:8000/app_dev.php/?token=my.token.jwt
我的用户已登录。 访问时

http://127.0.0.1:8000/app_dev.php/
我有一个用户anon(我的令牌设置为anon),我没有异常

如果我将loadUserByUsername更改为

  public function loadUserByUsername($username) {

    if (!$token = $this->requestStack->getCurrentRequest()->headers->get('Authorization') ?: $this->requestStack->getCurrentRequest()->query->get('token')) {
      $url = $this->router->generate('errorPage');
      return new RedirectResponse($url);
    }

    $user = new \AppBundle\Entity\User('MyUsername');
    $user->setJwtToken($token);
    return $user;
  }
我有这个错误

试图调用类的名为“getUsername”的未定义方法 “Symfony\Component\HttpFoundation\RedirectResponse”。500内部 服务器错误-未定义MethodException

如果我没有JWT(或无效),或有异常,如何重定向到页面