我一直在尝试使用RedBean ORM(http://redbeanphp.com)实现Silex安全提供程序包的UserInterface和UserProviderInterface。

由于RedBean ORM处理其对象的功能的方式,我需要将bean对象包装在另一个类中。

这对身份验证很有用,但对“记住我”功能的测试失败。

我注意到安全包沿链的某个位置对对象进行了序列化。

我以为这可能是错误的原因,所以我在包装器类中为“id”和“password”创建了属性,并使用__sleep和__wakeup方法在休眠期间忽略了该bean,并在唤醒时重新加载了该bean。尽管在__wakeup期间似乎一切正常加载,但是“记住我”功能的测试仍然失败。

我已经创建了我的代码的github存储库。如果有人有任何想法,我将不胜感激!

出于某种原因,RedBean,Silex和PHPUnit不允许其自身包含在存储库中。一个简单的 Composer 更新应该为您拉下来。 如果有人对为什么有任何想法,我也希望得到一个答案。

可以在以下位置找到github存储库:

https://github.com/christianmagill/silex-redbean-security

适用的文件是

要在数据库中创建测试用户,请执行以下操作:

/setup.php

要运行测试:

/index.php

我的UserInterface实现:

/src/App/Model/UserSecurityWrapper.php

我的UserProviderInterface实现:

/src/App/Model/UserProvider.php

我修改过的测试:

/src/App/Test/RememberMeRedBeanServiceProviderTest.php

原始测试:

/vendor/silex/silex/tests/Silex/Tests/Provider/RememberMeServiceProviderTest.php

最佳答案

问题出在我的自定义UserProvider的supportsClass方法上。我没有考虑命名空间。似乎没有为基本身份验证调用此函数,但“记住我”提供程序需要此函数。

关于security - Silex/Symfony2记住我身份验证用户界面RedBean包装器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15400450/

10-11 22:03