我是我项目的一个动作控制器(Sf 2.7.3),我自动为这样的用户自动化:
$providerKey = 'user_provider';
$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$this->get('security.token_storage')->setToken($token);
$loginevent = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $loginevent);
多数民众赞成似乎工作正常。在Symfony工具栏中出现:
以mail@example.com身份登录
已验证否
令牌课
UsernamePasswordToken
我的security.yml:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
frontend:
pattern: ^/
anonymous: ~
http_basic: ~
provider: user_provider
form_login:
login_path: user_login
check_path: user_login_check
use_referer: true
logout:
path: user_logout
target: /
remember_me:
key: *****
lifetime: 31536000
access_control:
- { path: ^/private-zone/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/private-zone/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/private-zone/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/private-zone*, roles: [ROLE_USER, ROLE_ADMIN] }
providers:
user_provider:
entity:
class: X\AccountBundle\Entity\User
property: email
manager_name: ~
in_memory:
memory: ~
encoders:
X\AccountBundle\Entity\User: { algorithm: sha512, iterations: 10 }
但是如果我进入/ private-zone路径,它会重定向到/ login(无限)。
如果我使用表单登录进行登录,一切正常,工具栏信息也一样。有人明白这个问题吗?
答案 0 :(得分:1)
根据this,$providerKey
的{{1}}参数是防火墙的名称,因此将UsernamePasswordToken
更改为$providerKey
。
答案 1 :(得分:0)
根据您的工具栏,您未经过身份验证。当您不向user / usertoken提供任何角色时,可能会发生这种情况。拥有令牌和拥有经过身份验证的令牌之间存在差异。
这可能是您的私有区域登录失败的原因:它需要用户或管理员角色,或者经过身份验证的无效令牌(或更高级别)。
确保'$ user-> getroles();'返回至少一个角色,并查看a)工具栏上的a)已验证为是和b)修复您的登录问题私有区