我想通过运行集成测试的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

另外2种可能的错误原因:

stateless: true部分中的防火墙上的

  • firewalls。未创建ContextListener,并且 token 未保存到 session 中。 AnonymousToken被分配给下一个请求。
  • stateless: true如果启用了RememberMeToken功能,您还可以使用AnonymousToken代替remember_me。此 token 也不完整。

  • 更新

    确保intercept_redirects中的config_test.yml为false,因为它可能会中断所有重定向。
    web_profiler:
        toolbar: false
        intercept_redirects: false
    

    09-25 20:00
    查看更多