Symfony2 通过集成测试的 API 对用户进行身份验证

标签 symfony authentication redis integration-testing wsse

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

另外两个可能的错误原因:

  1. stateless: true 在您的防火墙上的 firewalls 部分。 ContextListener 未创建, token 未保存到 session 中。 AnonymousToken 分配给下一个请求。

  2. 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/

相关文章:

phpunit 数组中的任何匹配器

session - CakePHP 保持从主域到子域的 session

windows - 使用 IE8 进行身份验证时更改域

phpMyAdmin 相当于 MySQL for Redis?

php - Redis 与 native session

laravel - 如何在 laravel 中使用不同的 redis 连接

symfony - Doctrine PostLoad 生命周期回调未在 fetchJoin 中执行

Symfony 调用从变量中获取名称

Symfony2 Doctrine2 ManyToMany 复合键引用的列名不存在

c# - 在控制台应用程序中调用 Azure AD Web API 方法时出现 401 错误