我們必須通過使用java編寫的web服務來提供「註冊」方法,因此我們無法訪問Drupal API。但我們需要能夠成功註冊用戶。只需將用戶添加到用戶表中即可,因爲新創建的用戶永遠無法成功登錄。我再次喜歡Drupal API並總是使用它,因爲這是「正確」的方式,但在這種情況下,我們只是沒有教師這樣做。對這種困境有何看法?如何在不使用API的情況下將用戶註冊到Drupal 6.x?
回答
您會想要瀏覽一下user_save()
API函數,以瞭解Drupal在創建新用戶時的功能。
Drupal對保存該類型數據的做法並沒有什麼深刻的含義:它都在數據庫中。所以,雖然你不能使用Drupal API並不理想,但你實際上只處理兩個數據庫插入:{user}
表插入(你已經完成)和{users_roles}
表插入。
根據您的信息,我懷疑缺少的鏈接是您沒有爲新用戶的UID在{users_roles}
表中添加一行。在user_save()
相關線路:
db_query('INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)', $account->uid, $rid);
哪裏$account->uid
是新創建的用戶的UID和$rid
是你想給用戶的角色的ID。新用戶至少需要authenticated user
角色。
user_save()
中的其他內容主要是完整性檢查(user_save()
句柄更新用戶,除了創建一個新用戶)和鉤子觸發,您可能不需要擔心此用例。
儘管Mark的方法可能是最高效的,但實現或維護起來並不容易。 Contrib模塊可以在用戶插入數據庫時作出反應,如果沒有Drupal,你會錯過這一點,並需要手工實現每個模塊。
更簡單的解決方案是創建一個菜單回調,您可以從Java實現中調用。您真正需要做的就是將相關信息發佈到Drupal並讓其撥打user_save
。它需要一個額外的請求,但是你可以得到Drupal鉤子系統和一個更加可維護的解決方案,如果添加新模塊,它不會中斷。
爲避免任何人以這種方式創建用戶,可以爲允許的IP創建一個設置,並在訪問回調中檢查被請求者的IP。這應該是最簡單和最安全的解決方案,因爲只有服務器才能創建用戶,而暴力攻擊無法成功。
更簡單的解決方案是創建一個自定義模塊,實現hook_menu()
以添加從Java應用程序調用的菜單回調。
此解決方案的問題在於不安全,因爲應該從匿名用戶訪問菜單回調;這意味着如果某人找到了菜單回調條目,那麼當用戶創建新帳戶時(例如,Drupal可以驗證他們使用的電子郵件地址是他們可以使用的郵件地址),他們可以繞過Drupal所做的檢查來創建新用戶。這就是爲什麼你永遠不應該有一個phpinfo.php
文件返回phpinfo()
的輸出,這是每個人都可以訪問的原因。
解決方法是傳遞給菜單回調您創建了一個其他用戶無法猜測的參數; Drupal 7會這樣做,以避免隨機用戶調用cron.php,導致Drupal驅動的站點變慢,或導致其他問題。Drupal有一個函數返回一個不可預測的值,這個值取決於Drupal的安裝(drupal_get_token()
)。
另一種方法是在自定義代碼中實現hook_xmlrpc()
,並公開一個新的RPC函數,該函數接受參數以驗證誰在調用它,如前面的情況。
- 1. 如何在Drupal 6.x中手動註冊用戶?
- 2. 如何在不使用Drupal的情況下使用Drupal 7表單API?
- 3. 如何在不使用vsdrfcomselfreg的情況下注冊DLL
- 4. ROR如何在沒有註冊的情況下記住用戶?
- 5. 如何在不註冊的情況下存儲有關用戶的信息?
- 6. 如何使phplist註冊表單將用戶返回到Drupal?
- 7. Yii2如何在不使用此插件的情況下注冊Plugin? )
- 8. 如何在用戶名不可用的情況下在註冊期間建議替代用戶名?
- 9. 在沒有註冊帳戶的情況下識別應用程序的用戶
- 10. 如何在不使用棄用API的情況下將圖片上傳到某個Picasa網絡相冊?
- 11. 推薦的註冊表使用情況
- 12. Drupal註冊用戶頁面?
- 13. 如何在不使用onClick的情況下關注Javascript鏈接
- 14. 如何在不使用setCoordinate的情況下更新註釋?
- 15. 如何在不使用Membership.CreateUser()的情況下創建用戶?
- 16. 重寫用戶註冊表單在Drupal 6
- 17. 如何在未註冊的情況下在FOSUserBundle中使用郵件程序?
- 18. 如何在不強制用戶註冊的情況下對用戶進行身份驗證?
- 19. 在不使用onload(IE)的情況下將css注入頁面?
- 20. 如何在不使用表單或網頁的情況下在我的MVC 5 Web App上註冊帳戶?
- 21. 用戶註冊(註冊)的Wordpress REST API
- 22. 如何在不使用OAuth的情況下製作安全API?
- 23. 如何在不註冊應用程序的情況下測試遊戲中心?
- 24. 允許註冊用戶在未登錄的情況下訪問其帳戶
- 25. Ansible,如何僅在用戶存在的情況下將用戶添加到組
- 26. 在不使用oReg.EnumKey的情況下在VBS中創建註冊表鍵陣列
- 27. 如何在不使用https重定向的情況下使用AWS API網關
- 28. 如何添加語言切換用戶/註冊形式在Drupal 6
- 29. 如何在不使用地圖的情況下找到用戶的位置android
- 30. 如何在不使用Interop的情況下將VBA代碼注入Excel .xlsm?
馬克,任何時候創建用戶,他們然後被帶到「接受條款和條件頁面」。無論他們接受與否,他們似乎都無法進一步發展。 – jini 2010-08-18 06:39:01
@jini,Drupal核心沒有條款和條件系統:它聽起來像一個contrib模塊阻止登錄。你會想看看他們的代碼,看看它是如何驗證的。很可能,您需要使用新用戶的UID向該模塊的表中添加一行。 – 2010-08-18 06:50:34