我想通过运行集成测试的 API(外部用户提供程序)对用户进行身份验证。
我的config_test.yml
imports:
- { resource: config.yml }
- { resource: parameters_test.yml }
framework:
test: ~
session:
storage_id: session.storage.mock_file
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: info
登录(成功)后,下一步是询问用户信息,我得到:
"Full authentication is required to access this resource."
我想存储的会话发生了一些事情。我正在开发和生产上使用 Redis 来存储会话。测试环境中的模拟会话,因为
"Failed to start the session because headers have already been sent by "/path/to/bin/phpunit" at line 2."
手动执行此操作就像一种魅力。
session.storage.mock_file
默认使用%kernel.cache_dir%/sessions
来存储会话的文件。检查此文件夹对于服务器用户和 cli 用户是否都是可写的。
"设置权限"http://symfony.com/doc/current/book/installation.html#configuration-and-setup
另外 2 个可能的错误原因:
-
stateless: true
firewalls
部分中的防火墙上。不会创建ContextListener
,也不会将令牌保存到会话中。AnonymousToken 被分配给下一个请求。 -
stateless: true
如果启用了该功能remember_me
您也可以使用RememberMeToken
而不是AnonymousToken
。这个令牌也不是完全成熟的。
更新
确保intercept_redirects
在config_test.yml
中为 false,因为它可能会破坏所有重定向。
web_profiler:
toolbar: false
intercept_redirects: false