如何管理Full authentication is required to access this resource.
?
我想在未经过身份验证时重定向用户。
我有自定义uthenticater根据会话数据验证用户,我想在他没有验证时重定向用户。
我的身份验证员类:
/**
* @Service("sso_authenticator")
*/
class SsoAuthenticator implements SimplePreAuthenticatorInterface
{
/**
* @var SsoUserProvider
*/
protected $userProvider;
/**
* @InjectParams({
* "userProvider" = @Inject("sso_user_provider")
* })
*/
public function __construct(SsoUserProvider $userProvider)
{
$this->userProvider = $userProvider;
}
public function createToken(Request $request, $providerKey)
{
$user = $request->getSession()->get('sso_user');
if (!$user) {
throw new BadCredentialsException('No user found');
}
return new PreAuthenticatedToken(
'anon.', $user, $providerKey
);
}
public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey)
{
$user = $token->getCredentials();
if (!is_array($user)) {
$user = $token->getUser();
}
if (!$user) {
throw new AuthenticationException('User does not exist.');
}
$ssoUser = $this->userProvider->loadUser($user);
return new PreAuthenticatedToken(
$ssoUser, $user, $providerKey, $ssoUser->getRoles()
);
}
public function supportsToken(TokenInterface $token, $providerKey)
{
return $token instanceof PreAuthenticatedToken && $token->getProviderKey() === $providerKey;
}
}
答案 0 :(得分:2)
我将登录路径设置为注销路径,如下所示:
secured_area:
form_login:
login_path : main_user_logout
然后我写了自定义注销处理程序:
/**
* @Service("sso_authentication_handler")
*/
class SsoAuthenticationHandler implements LogoutSuccessHandlerInterface
{
/**
* @var Router
*/
private $router;
/**
* @var array
*/
protected $ssoUrls;
/**
* @InjectParams({
* "ssoUrls" = @Inject("%wordpress_sso%"),
* "router" = @Inject("router")
* })
*/
public function __construct(array $ssoUrls, Router $router)
{
$this->ssoUrls = $ssoUrls;
$this->router = $router;
}
public function onLogoutSuccess(Request $request)
{
$locale = $request->getLocale();
if ($locale === 'pl') {
$url = $this->ssoUrls[$locale];
} else {
$url = $this->ssoUrls['en'];
}
$url .= '?returnUrl=' . $this->router->generate('main');
return new RedirectResponse($url);
}
}
所以使用这种组合我会产生一些行为,例如当你没有通过身份验证或者当他退出时,我会将他重定向到其他网站进行登录,在我的例子中是wordpress。