【问题标题】:Where to put OAuth logic?在哪里放置 OAuth 逻辑?
【发布时间】:2011-09-08 05:33:46
【问题描述】:

我在一个项目中使用 Zend 框架,并且我正在创建一个仅用于身份验证的控制器。 在这个项目中,我们将接受用户通过 facebook、twitter、myspace 等其他网站的帐户进行注册。为此,我们将使用 OAuth。但是我有一个疑问,我应该把每个 OAuth 站点相关身份验证的逻辑放在哪里?比如只有facebook,在我的控制器里就占了50行代码,这样我的控制器就不会瘦了……

我想知道我应该把这个放在哪里。 为每个站点创建一个 Zend_Auth 适配器,只为此创建一个服务,最好的方法是什么?

对不起可怜的英语。 :)

【问题讨论】:

    标签: php zend-framework oauth service-layer actioncontroller


    【解决方案1】:

    您的 OAuth 逻辑应该像您的所有业务逻辑一样存在于模型中。你的控制器应该做的是控制程序流和设置视图变量以在你的视图脚本中使用。

    亲切的问候 加里

    【讨论】:

      【解决方案2】:

      JF Austin 有一个相当 generic OAuth authentication adapter implementation 使用 Zend_Oauth_Consumer。从那里为 Twitter、Facebook 等创建特定的子类似乎很简单。他甚至似乎已经有了Twitter adapter。适配器的使用在his blog post 中有所描述。

      或者,通过Lloyd Watkin 记下this one

      结果:所有 OAuth 逻辑都隐藏在这些适配器中。然后,您的控制器可以实例化此身份验证适配器,将其提供给 Zend_Auth::authenticate($adapter),然后根据返回的结果采取行动,使控制器专注于更高级别的应用程序连接。

      【讨论】:

      • 嘿伙计,非常感谢您的回复。 OAuth 部分现已完成。现在我怀疑我应该在哪里处理这些子类,我正在考虑为我的类中的每个站点创建一个方法来处理用户操作(服务层),比如_loginFacebook、_loginTwitter,你怎么看?再次感谢您。
      • 一个带有authFacebook()authTwitter()等方法的AuthService听起来不错。更好的可能是AuthServiceInterface 与单一方法authenticate()。然后创建实现该接口的具体实例,例如:AuthServiceTwitter implements AuthServiceInterfaceAuthServiceFacebook implements AuthServiceInterface等。只是想出来。
      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 2011-08-02
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      相关资源
      最近更新 更多