本文整理汇总了PHP中TYPO3\Flow\Security\Context::getAuthenticationStrategy方法的典型用法代码示例。如果您正苦于以下问题:PHP Context::getAuthenticationStrategy方法的具体用法?PHP Context::getAuthenticationStrategy怎么用?PHP Context::getAuthenticationStrategy使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TYPO3\Flow\Security\Context
的用法示例。
在下文中一共展示了Context::getAuthenticationStrategy方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: authenticate
/**
* Tries to authenticate the tokens in the security context (in the given order)
* with the available authentication providers, if needed.
* If the authentication strategy is set to "allTokens", all tokens have to be authenticated.
* If the strategy is set to "oneToken", only one token needs to be authenticated, but the
* authentication will stop after the first authenticated token. The strategy
* "atLeastOne" will try to authenticate at least one and as many tokens as possible.
*
* @return void
* @throws \TYPO3\Flow\Security\Exception
* @throws \TYPO3\Flow\Security\Exception\AuthenticationRequiredException
*/
public function authenticate()
{
$this->isAuthenticated = false;
$anyTokenAuthenticated = false;
if ($this->securityContext === null) {
throw new Exception('Cannot authenticate because no security context has been set.', 1232978667);
}
$tokens = $this->securityContext->getAuthenticationTokens();
if (count($tokens) === 0) {
throw new NoTokensAuthenticatedException('The security context contained no tokens which could be authenticated.', 1258721059);
}
/** @var $token TokenInterface */
foreach ($tokens as $token) {
/** @var $provider AuthenticationProviderInterface */
foreach ($this->providers as $provider) {
if ($provider->canAuthenticate($token) && $token->getAuthenticationStatus() === TokenInterface::AUTHENTICATION_NEEDED) {
$provider->authenticate($token);
if ($token->isAuthenticated()) {
$this->emitAuthenticatedToken($token);
}
break;
}
}
if ($token->isAuthenticated()) {
if (!$token instanceof SessionlessTokenInterface) {
if (!$this->session->isStarted()) {
$this->session->start();
}
$account = $token->getAccount();
if ($account !== null) {
$this->securityContext->withoutAuthorizationChecks(function () use($account) {
$this->session->addTag('TYPO3-Flow-Security-Account-' . md5($account->getAccountIdentifier()));
});
}
}
if ($this->securityContext->getAuthenticationStrategy() === Context::AUTHENTICATE_ONE_TOKEN) {
$this->isAuthenticated = true;
$this->securityContext->refreshRoles();
return;
}
$anyTokenAuthenticated = true;
} else {
if ($this->securityContext->getAuthenticationStrategy() === Context::AUTHENTICATE_ALL_TOKENS) {
throw new AuthenticationRequiredException('Could not authenticate all tokens, but authenticationStrategy was set to "all".', 1222203912);
}
}
}
if (!$anyTokenAuthenticated && $this->securityContext->getAuthenticationStrategy() !== Context::AUTHENTICATE_ANY_TOKEN) {
throw new NoTokensAuthenticatedException('Could not authenticate any token. Might be missing or wrong credentials or no authentication provider matched.', 1222204027);
}
$this->isAuthenticated = $anyTokenAuthenticated;
$this->securityContext->refreshRoles();
}
示例2: authenticate
/**
* Tries to authenticate the tokens in the security context (in the given order)
* with the available authentication providers, if needed.
* If the authentication strategy is set to "allTokens", all tokens have to be authenticated.
* If the strategy is set to "oneToken", only one token needs to be authenticated, but the
* authentication will stop after the first authenticated token. The strategy
* "atLeastOne" will try to authenticate at least one and as many tokens as possible.
*
* @return void
* @throws \TYPO3\Flow\Security\Exception
* @throws \TYPO3\Flow\Security\Exception\AuthenticationRequiredException
*/
public function authenticate()
{
$this->isAuthenticated = FALSE;
$anyTokenAuthenticated = FALSE;
if ($this->securityContext === NULL) {
throw new Exception('Cannot authenticate because no security context has been set.', 1232978667);
}
$tokens = $this->securityContext->getAuthenticationTokens();
if (count($tokens) === 0) {
throw new NoTokensAuthenticatedException('The security context contained no tokens which could be authenticated.', 1258721059);
}
/** @var $token TokenInterface */
foreach ($tokens as $token) {
/** @var $provider \TYPO3\Flow\Security\Authentication\AuthenticationProviderInterface */
foreach ($this->providers as $providerName => $provider) {
if ($provider->canAuthenticate($token) && $token->getAuthenticationStatus() === TokenInterface::AUTHENTICATION_NEEDED) {
$provider->authenticate($token);
if ($token->isAuthenticated()) {
$this->emitAuthenticatedToken($token);
}
break;
}
}
if ($token->isAuthenticated()) {
if (!$token instanceof SessionlessTokenInterface && !$this->session->isStarted()) {
$this->session->start();
}
if ($this->securityContext->getAuthenticationStrategy() === Context::AUTHENTICATE_ONE_TOKEN) {
$this->isAuthenticated = TRUE;
return;
}
$anyTokenAuthenticated = TRUE;
} else {
if ($this->securityContext->getAuthenticationStrategy() === Context::AUTHENTICATE_ALL_TOKENS) {
throw new AuthenticationRequiredException('Could not authenticate all tokens, but authenticationStrategy was set to "all".', 1222203912);
}
}
}
if (!$anyTokenAuthenticated && $this->securityContext->getAuthenticationStrategy() !== Context::AUTHENTICATE_ANY_TOKEN) {
throw new NoTokensAuthenticatedException('Could not authenticate any token. Might be missing or wrong credentials or no authentication provider matched.', 1222204027);
}
$this->isAuthenticated = $anyTokenAuthenticated;
}