我想通过运行我的集成测试的 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."
我猜存储的 session 发生了什么事。 我在开发和生产环境中使用 Redis 来存储 session 。 由于
在测试环境上模拟 session"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
来存储 session 文件。检查此文件夹是否对服务器用户和 cli 用户都是可写的。
“设置权限” http://symfony.com/doc/current/book/installation.html#configuration-and-setup
另外两个可能的错误原因:
stateless: true
在您的防火墙上的firewalls
部分。ContextListener
未创建, token 未保存到 session 中。 AnonymousToken 分配给下一个请求。stateless: true
如果启用了remember_me
功能,您还可以使用RememberMeToken
而不是AnonymousToken
。这个 token 也不是完全成熟的。
更新
确保 config_test.yml
中的 intercept_redirects
为 false,因为它可能会破坏所有重定向。
web_profiler:
toolbar: false
intercept_redirects: false
关于Symfony2 通过集成测试的 API 对用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041474/