2011-12-06 90 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我認爲這是以更好的方式註冊和登錄用戶的線索,儘管我還沒有在我的代碼中使用它。 –