我无法退出用户。
我将自定义用户管理逻辑移植到Symfony 4项目。它使用security
和guard
的配方。
以下是我主防火墙中的logout
配置:
logout:
path: /logout
target: /
结果:
- 用户进入/注销
- 用户被重定向到/
- is_granted("IS_AUTHENTICATED_REMEMBERED")
继续在我的模板中返回true
(预计会false
)
其他考虑因素:
- 防火墙条目被触发,因为如果我删除它会出错
- 我已尝试向logout
添加其他参数以销毁会话和Cookie,但这没有任何区别
- 登录工作正常
有关如何解决这个问题的想法吗?
:: edit - 按要求添加security.yaml
::
security:
encoders:
App\Entity\User: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
app_users:
entity: { class: App\Entity\User, property: email }
app_oauth:
id: app.oauth_user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
provider: app_users
anonymous: ~
oauth:
resource_owners:
google: "/login/check-google"
default_target_path: /
login_path: /
failure_path: /login
oauth_user_provider:
service: app.oauth_user_provider
remember_me:
secret: "%env(APP_SECRET)%"
lifetime: 2592000
path: /
guard:
authenticators:
- App\Security\LoginFormAuthenticator
entry_point: App\Security\LoginFormAuthenticator
logout:
path: /logout
target: /
switch_user: ~
答案 0 :(得分:2)
添加这些命令
在security.yaml
logout:
path: /logout
target: /
invalidate_session: true
在控制器中
/**
* @Route("/logout", name="logout")
*/
public function logout()
{
}
在退出按钮
<a class="text-muted" href="{{ path('logout') }}">logout </a>
答案 1 :(得分:1)
检查serialize
中的unserialize
和$this->email
字段App\Entity\User
方法。
答案 2 :(得分:0)
请参阅我对相同问题的回答here
我将重复对我有用的内容:
如果您按照Symfony Security Logging Out上的说明进行操作,请确保使用正确的路由名称访问/ logout。我必须使用'app_logout'使其实际注销,并且无法在Security.yaml文件中更改该路径名,而又不修改控制器注释(请参见下文)。无需控制器。无需自定义处理程序(谢天谢地)。
配置注销后,尝试运行php bin/console debug:router
来检查/ logout的实际路由。
Security.yaml的注销部分看起来像这样:
logout:
path: app_logout
# where to redirect after logout
target: front
根据说明,我添加了一个空控制器(如果您想要自定义路径名,则必须在此处更改路径名,并将更改添加到Security.yaml):
<?php
//App/Controller/SecurityController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class SecurityController extends AbstractController
{
/**
* @Route("/logout", name="app_logout")
*/
public function logout()
{
throw new \Exception('This method can be blank - it will be intercepted by the logout key on your firewall');
}
}
我的呼叫看起来像这样:
<a class="nav-link" href="{{ path('app_logout') }}">Logout</a>