sfGuard检查权限和凭据以实现Google的Oauth 2

时间:2015-03-17 09:45:31

标签: symfony-1.4 google-oauth sfguard

我想在我的symfony-1.4 CRM中集成Google的Oauth2。我已经成功实现了这个,我已经在我自己的模块中扩展了sfGuardAuth,现在mysfGuardAuth被用于签名和注销。我是否可以通过2个额外的操作来处理Google的Oauth2:

executeCkeckGoogleAccess();
executeOauth();

问题是要检查Google的令牌是否仍然有效,我必须将每个模块的每个操作重定向到checkGoogleAccess模块中的操作mysfGuardAuth

我想要的是在执行或不执行请求的操作之前,在symfony或sfGuard或其他任何检查正确的perms或凭据的位置以隐式方式检查这一点。

我只想写一次代码。 谢谢。

1 个答案:

答案 0 :(得分:0)

经过一番研究,这就是sfGuard如何检查一切。

当您对模块操作发出请求时,在执行操作之前,将分配新的sfContext。 sfContext获取扩展sfGuardUser的用户并具有一些执行的方法。 有权限,会话状态和其他任何其他选项 必须在apps/yourApp/lib

中配置用户

默认为apps/yourApp/lib/myUser,它扩展了sfGuardUser。实现这一目标的最合适的方法是创建一个新的用户类,如:apps/yourApp/lib/yourAppUser,它还扩展了sfGuardUser,并使用您想要的功能扩展方法initialize和/或shutdown

通过这种方式,我已经实现了让Google的Oauth2在我的应用中运行。

我希望这对更多人有用。

<强>更新 上面描述的都是正确的,但是如果你想在动作执行之前检查一些东西,你必须使用过滤器而不是之前描述的过滤器。 过滤器在每个操作之前执行,因此您可以签出您需要访问当前上下文的任何内容,并为用户设置新属性。在我的情况下,我想检查所请求的操作是否需要google令牌,如果为true,则另一个过滤器将检查用户是否有alraedy有效令牌,在这种情况下,没有任何反应,否则,用户被重定向到模块/操作它处理谷歌令牌请求。

不同的过滤器,操作和请求之间的通信是通过用户属性处理的。 用户是扩展sfGuardSecurityUser的clas myOwnUser的对象,扩展了函数signOut以删除保存在&#34; myOwnNamespace&#34;中的所有属性。