2011-12-06 58 views
4

我想为我的d6网站开发一个自定义模块,让用户注册并登录我的网站,就像普通用户使用现有的drupal登录和注册系统一样。替换Drupal注册并登录Facebook登录

我看着fbconnect module(尚未更新为使用最新的Facebook SDK PHP [版本3]),以及drupal for facebook其中Facebook登录映射到一个现有的用户ID,如果使用相同的电子邮件Drupal用户存在 - 这是不是我正在寻找。

我所希望做的:

  • 用户来我的网站。点击登录Facebook。
  • 他显示了fb登录弹出窗口。用户授予权限。
  • 在这一点上,我把他记录下来到现场,并记录了他。
  • 他现在可以访问身份验证的用户设置而产生的职位等
  • 他注销的所有权限。再次返回并登录,这次他第一次创建的所有内容都可以像使用普通身份验证的用户一样使用。

我无法看到模块结构。 我将如何实现这一目标?我知道我需要使用服务器端身份验证,如here所述。

我很熟悉创建Drupal模块,只是在思考这个架构时遇到了麻烦。如果有人有这方面的经验,我将不胜感激。如果有人有详细的步骤提供,我会成为世界的顶峰。

+2

你试试[Facebook的OAuth的(http://drupal.org/project/fboauth)模块? –

+1

我建议你让你的问题更具范围;因为它是关于如何编写Drupal模块的一个过于普通的问题,因为您正在询问模块结构。 – kiamlaluno

+0

@PierreBuyle非常感谢您的指点。你提到的模块看起来很有希望。我将尝试并报告。 –

回答

0

我正在用自己的Facebook账号自动注册用户,没有通过,所以他们只有在Facebook上批准并认可他们为Facebook用户时才能登录。

我对Facebook使用PHP SDK。另外请记住,您需要签名的请求,并且您尝试注册的用户在尝试注册之前必须先接受您的APP(获取他/她的用户ID)。

您可以获得与注册插件或在Facebook页面的标签签名的请求......

这里是我的代码,它没有充分测试,但它的工作原理,并很可能会帮你想办法。

// Registro automático en Drupal con datos de Facebook 
function fbconex_registro() { 

global $facebook; 
global $user; 

$SR = $facebook->getSignedRequest(); 

if ($SR['registration']) { 

    $datos = $SR['registration']; 
    $usuario_nuevo['status'] = 1; 
    $usuario_nuevo['mail'] = $datos['email']; 
    $usuario_nuevo['name'] = 'fb-' . $facebook->getUser(); 

    // Comprobar que el usuario no existe 
    $usuario_nuevo = user_save(null, $usuario_nuevo); 

    if (!$usuario_nuevo) { 
     $html .= 'Se detectaron problemas. No se pudo registrar.'; 
    }; 
} else { 
    $html .= 
      'Para iniciar sesión o registrarse visite 
    <a href="/concursocial/sesion">mi sesión</a><br/>'; 

    if ($user->uid != 0) 
     drupal_goto('user'); 
} 

if ($usuario_nuevo) { 
    $user = $usuario_nuevo; 
    drupal_goto('user'); 
} 

return $html; 
} 
+0

谢谢!这看起来有希望。尽管全球$ facebook对象是什么?这是在SDK中定义的吗? –

+0

它是Facebook PHP SDK附带的Facebook对象的一个​​实例。下面是一个示例https://developers.facebook.com/docs/reference/php/ –

+0

查看fbconnect.module(D6)并做了一些研究,我发现了Drupal的一个函数,它处理外部登录和注册http:// api。 drupal.org/api/drupal/modules--user--user.module/function/user_external_login_register/7我认为这是以更好的方式注册和登录用户的线索,尽管我还没有在我的代码中使用它。 –