2010-06-21 63 views
0

我正在開發一個Drupal 6模塊來提供基於OAuth的用戶認證和註冊。我已按照http://oauth.net/core/1.0a/#anchor9上的說明使用OAuth模塊進行身份驗證。下一步是使用服務提供商的自定義API使用驗證後提供的信息創建用戶帳戶。在Drupal中進行外部認證後透明用戶註冊

根據http://drupal.org/node/497612#comment-3047302,我不應該使用user_external_login_register(),但請參閱OpenID模塊瞭解如何正確登錄外部用戶。

研究的OpenID模塊後,這裏是我打算做:

  • 嘗試加載現有用戶的使用user_external_load()定製API結果authname的構建。
  • 如果用戶存在,則使用user_external_login()登錄用戶。
  • 如果沒有,假裝登記表已經提交(如openid_authentication()一樣)來創建一個新的用戶帳戶。如果需要任何附加信息以便用戶註冊,則將其重定向到預填表單。

這是正確的做法嗎?除了OpenID之外,還有其他模塊值得關注嗎?

回答

0

你可以看看以前的Drupal模塊。這個模塊做了兩件完全不同的事情(對於架構:))。 *它將信息生成到「運行Drupal」目錄的中心。 (並提供了一個頁面來顯示這樣一個目錄!) *它允許登錄其他Drupal網站的憑據。

後者是你正在尋找的。請注意,該模塊已停止使用,不是因爲登錄方法做錯了,而是因爲DrupalID機制本身存在缺陷。它已被替換爲openID和oauth。

http://drupalcode.org/viewvc/drupal/drupal/modules/drupal/drupal.module?hideattic=0&view=markup

鉤子和方法,你要尋找(按順序)爲:

  • drupal_form_alter - 添加驗證回調到登錄表單小號
  • drupal_form_user_login_alter - 在登錄表單中添加有關替代登錄的信息。
  • drupal_distributed_validate - 驗證回調:調用drupal_auth查看用戶是否有效。如果是這樣,調用user_external_login_register
  • drupal_auth - 幫助驗證回調:確定憑據是否有效。

所有其他功能都是幫助功能,或提供該目錄功能,或允許遠程站點對我們的數據庫進行身份驗證。這兩者都不會使用。

+0

謝謝你的提示。但是drupal_distributed_validate使用user_external_login_register(),根據http://drupal.org/node/497612#comment-3047302不應該使用它。我想這是因爲它不強制執行額外的註冊字段,並重新創建(本地用戶,如果現有本地用戶的名稱與外部用戶的名稱不匹配) – 2010-06-22 11:42:09

+0

這是在d7中的強化。但D6,儘管不完美。 user_external_login_register()仍然是要走的路。或者,你可以自己重寫這樣的功能,並在那裏強化它。 – berkes 2010-06-22 16:28:37