【发布时间】:2018-06-20 20:43:16
【问题描述】:
我正在将使用 Symfony2.7 构建的项目更新到 Symfony4,一切正常并且具有良好的兼容性,但应该没问题的一件事是,内置资源,即安全层,没有按预期工作.
我面临的问题是我无法再注销用户。我按照guide 上的步骤进行操作,但没有任何改变。
以下是安全配置:
#config/packages/security.yaml
security:
encoders:
App\Entity\Clients:
algorithm: bcrypt
providers:
app_user_provider:
entity:
class: App\Entity\Clients
firewalls:
app:
pattern: ^/
anonymous: ~
provider: app_user_provider
remember_me:
secret: "%kernel.secret%"
form_login:
use_referer: true
login_path: login
check_path: login_check
always_use_default_target_path: false
default_target_path: dashboard
csrf_token_generator: security.csrf.token_manager
logout:
path: logout
target: home
invalidate_session: false
我使用的路径是路径名称,但也尝试了路径本身。
我可以正常登录任何用户,但是当我点击注销路由时,我只是被重定向到主路由,但用户仍然经过身份验证。
尝试设置自定义处理程序注销,例如:
logout:
handlers: [logout_handler]
它引用了实现 Symfony\Component\Security\Http\Logout\LogoutHandlerInterface 的服务,但它甚至没有调用处理程序。
如果我只能使用默认处理程序那就太好了,并且有必要保持“remember_me”行为,这在 2.7 中也可以正常工作。
谁能帮我解决这个问题?
编辑:我的配置 routes.yaml 是空的,因为我使用的是注解路由,所以 config/packages/routing.yaml 如下:
framework:
router:
strict_requirements: ~
就像使用 composer create-project 命令初始化时一样。 对于注释配置,我有文件 config/routes/annotations.yaml:
controllers:
resource: ../../src/Controller/
type: annotation
同样,它是配方自己创建的配置。
【问题讨论】:
-
你能显示你的 config/routes.yaml 吗?您在
logout路由的某些控制器中有操作吗? -
我对这个问题做了一些补充。是的,我有一个注销动作,因为它是一个路由名称,需要定义它,所以我创建了一个动作,就像它在框架的其他版本中工作一样,但它是空的,只是用一个动作定义路由.
标签: php symfony security logout symfony4