我想管理没有数据库的用户,并检查他们的JWT
我使用Guard和自定义服务来验证我的JWT。
我想要使用自定义user provider,如果用户没有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';
}
}
这是我的service.yml
app.webservice_user_provider:
class: AppBundle\Security\WebserviceUserProvider
arguments: ['@router','@request_stack']
和我的security.yml
user-providers
providers:
webservice:
id: app.webservice_user_provider
当我在queryString
中访问带有令牌的网址时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的\元器件\ HttpFoundation \ RedirectResponse&#34 ;. 500内部 服务器错误 - UndefinedMethodException
如果我没有JWT(或无效)或有异常,我该如何重定向到某个页面?