【发布时间】:2018-01-29 11:29:58
【问题描述】:
我创建了一种使用 API 密钥对用户进行身份验证的方法,这要归功于实现 SimplePreAuthenticatorInterface 接口的类 A。一切正常(用户已成功通过身份验证)。
我正在尝试存储 API 密钥,以供以后在用户的旅程中使用。为此,在我的类 A 的身份验证方法中,我返回一个 PreAuthenticatedToken,其中的凭据是我的 API 密钥。
问题是:在自定义服务中,当我尝试获取令牌凭据时,我得到null...当我评论PreAuthenticatedToken Symfony 核心类的第 76 行时,我成功获取了 API 密钥:
public function eraseCredentials()
{
parent::eraseCredentials();
//$this->credentials = null;
}
我的问题是:
1) 为什么在用户通过身份验证时调用eraseCredentials 方法?我认为在用户注销期间调用了此方法...
2)我做错了什么? PreAuthenticatedToken 令牌是存储我的 API 密钥的正确位置吗?如何从自定义服务中取回它们?
感谢您帮助我。 :)
PS:我是在 Stackoverflow 上发帖的新手(和英文 ^^)。如有任何错误,请提前道歉。
我找到了another similar question,但它没有任何帮助,我添加了一些更精确的信息。
编辑:我尝试获取凭据的自定义服务代码是:
$token = $this->container->get("security.token_storage")->getToken();
if ($token !== null) {
$credentials = $token->getCredentials();
// $credentials is null here
}
编辑 2:SimplePreAuthenticatorInterface::authenticateToken 方法代码中的返回部分:
return new PreAuthenticatedToken(
$user,
$apiKeys,
$providerKey,
$user->getRoles()
);
【问题讨论】:
标签: php symfony authentication single-sign-on token