2015-08-26 37 views
0

我一直试图按照http://framework.zend.com/manual/current/en/modules/zend.authentication.intro.html上的说明执行Zend\Authentication,但我似乎错过了一部分难题。如何在ZF2中实现自定义认证存储类?

我已经构建了一个自定义适配器,哪个工作正常,但我对如何实现自定义存储感到茫然。

我已经创建了一个实现StorageInterface的自定义类,但是我无法真正将我的头围绕在我应该对方法执行的操作上。

写入方法是唯一获取输入的方法,这似乎是Authentication\Result的第二个参数。

我不明白什么数据我应该写入我的存储(Redis) - $contents的内容是否足够?我不应该在自定义存储类中使用某种键或某种可用于查询存储的东西吗?

回答

1

即使您正在编写自己的身份验证适配器,也不一定要构建自定义会话存储。如果您需要修改存储以添加功能,则仍然可以简单地扩展其中一个存储类别。例如,这是一个我已经完成的课程。 https://github.com/soliantconsulting/SimpleFM/blob/master/library/Soliant/SimpleFM/ZF2/Authentication/Storage/Session.php

即使您最终需要自定义会话处理,我建议您开始使用现有的Zend会话存储类来使您的身份验证适配器正常工作。然后你可以回过头来关注第二遍存储。

我发现它非常有用,可以看看Zend类是如何工作的。另外,看看单元测试。最后,如果它有帮助,请查看我的SimpleFM Authentication类,因为这些类是一个很好的简单用例。还有一个简单的例子,通过这里的工厂实现自定义适配器https://github.com/soliantconsulting/SimpleFM-skeleton/tree/master/module/SimpleFMAuth/src/SimpleFMAuth/Factory

0

我回答我自己的问题与我想出的情况,以防万一它可能在未来帮助其他人。

事实证明,解决方案相当简单。我的印象是会有一些魔法,但事实并非如此。

我的解决方案只是使用散列键将所有会话数据存储在Redis中,并将散列键的值存储在cookie中以便于检索。

+0

不是安全敏感应用程序的最佳方法,至少要确保使用加密的cookie。通过猜测他们的存储密钥,没有人能够从别人的会话中获取数据。 – umbrel

相关问题