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