我想在我的symfony-1.4 CRM中集成Google的Oauth2。我已经成功实现了这个,我已经在我自己的模块中扩展了sfGuardAuth,现在mysfGuardAuth被用于签名和注销。我是否可以通过2个额外的操作来处理Google的Oauth2:
executeCkeckGoogleAccess();
executeOauth();
问题是要检查Google的令牌是否仍然有效,我必须将每个模块的每个操作重定向到checkGoogleAccess
模块中的操作mysfGuardAuth
。
我想要的是在执行或不执行请求的操作之前,在symfony或sfGuard或其他任何检查正确的perms或凭据的位置以隐式方式检查这一点。
我只想写一次代码。 谢谢。
答案 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;中的所有属性。