在PHP网站中使用Facebook PHP SDK进行身份验证的最佳方式,特别是在Zend


Best way for using Facebook PHP SDK in PHP website for authentication Specially in Zend

我正在制作一个与Facebook合作的网站。我看到了人们连接Facebook的几种方式。我不知道怎么搞混了。据我所知,我可以通过以下方式使用Facebook进行身份验证:

  1. 使用"fb:login-button"并在Facebook完成其工作后,重定向或刷新我的页面,并从Facebook .php创建一个新实例,以便获得当前用户和其他。
  2. 仅使用SDK并从中创建一个新实例并生成LoginUrl和LogOutUrl,用户登录后,继续像我们在第一个中所做的那样。

ps1:我在这里写的方法,是我可以使用Facebook SDK的所有方法吗?ps2:我很困惑,因为我不会编程!我不能决定的是我要走的路,将来会支持我想要的一切!!

Facebook身份验证使用OAuth。您列出的两个选项都使用这种机制,唯一的区别是选项一使用Facebook的Javascript SDK,而第二个使用Facebook的PHP SDK。我想说,你的选择取决于你是喜欢使用PHP还是JS与Facebook交互。

至于如何集成,如果您使用PHP SDK,我建议创建一个控制器插件,在其中调用SDK上的getUser()方法。如果用户已登录,SDK将返回用户数据,否则返回null。然后,如果设置了这个用户对象,您可以将它与注销URL一起分配给视图。如果没有,你可以指定登录URL,并在你的应用程序中适当的地方添加一个登录链接。

类似以下语句的内容:

class Your_Plugin_Login extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $facebook = Zend_Registry::get('facebook');
        $user = $facebook->getUser();
        if ($user) {
            // assign the user object to the view for easy access later
            $layout = Zend_Layout::getMvcInstance();
            $view = $layout->getView();
            $view->user = $user;
            $view->logoutUrl = $facebook->getLogoutUrl();
        } else {
            $view->loginUrl = $facebook->getLoginUrl();
            $view->user = false;
        }
    }
}

(此代码假设Facebook SDK在注册表中存储为' Facebook ',并且您正在使用Zend_Layout。)

为了获得额外的积分,您可以将用户数据存储在Zend_Auth中,如果您已经在您的站点上使用Zend_Auth进行标准登录,这将特别方便。

作为替代路线,Chris Weber写了一个不错的(如果不是完全完成)OAuth2/Zend_Service_Facebook实现,你可以在这里找到:https://github.com/chrisweb/oauth-2---facebook---zend-framework-components/blob/master/README但我最终放弃了这个,而是在标准SDK周围写了一个zf友好的包装器。