我想将匿名用户重定向到登录页面,但(显然)遇到了问题。我收到一个错误:
访问此资源需要完全身份验证。
这是内部服务器错误。我可以通过添加form_login来解决这个问题,但是我已经编写了一个自定义身份验证提供程序,并且使用form_login会导致我的自定义ldap身份验证提供程序不再被使用。 (这意味着用户不能再登录了)
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
security: false
api:
pattern: ^/api
security: false
secured_area:
pattern: ^/
anonymous: true
ldap: true
logout:
path: /logout
target: /login
providers:
chain_provider:
chain:
providers: [in_memory, ldap]
in_memory:
memory:
users:
admin: { password: adminpass }
ldap:
id: ldap_user_provider
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Prophets\ParkingBundle\Entity\User: plaintext
access_control:
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_REMEMBERED }
- { path: ^/_wdt, roles: 'IS_AUTHENTICATED_ANONYMOUSLY' }
任何?
答案 0 :(得分:6)
这是一个老问题,但无论如何都值得回答。
我有几乎相同的问题,但不是重定向用户,我只是想显示403 json页面。
问题是,当没有form_login
或默认功能不完整时,SF2不提供默认功能,以进一步研究这个检查SF2的ExceptionListener类的handleAccessDeniedException
方法。
解决方法是在防火墙上实现entry_point。 Security Configuration doc以及Firewalls中的更多内容。
您只需在服务中实现Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface接口,并在entry_point上指向该服务。所以我假设您要 HTTP.302
<?php
namespace Acme\ApiBundle\Security\Firewall;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
class EntryPoint implements AuthenticationEntryPointInterface{
private $url;
public function __construct($url){
$this->url = $url;
}
public function start(Request $request, AuthenticationException $authException = null){
$response = new Response(
'',
Response::HTTP_FOUND, //for 302 and Response::HTTP_TEMPORARY_REDIRECT for HTTP307 read about in [Response][4]
array('Location'=>$this->url));
return $response;
}
}
编辑:我必须补充一点,这是一个已知问题,并且在某种程度上是设计特定/意图错误:https://github.com/symfony/symfony/issues/8467#issuecomment-163670549