2014-04-21 222 views
2

我設置了一個Moodle環境,並且我需要用戶能夠通過外部網站使用網站的憑據登錄網站。理想情況下,他們將訪問網站,登錄,然後單擊一個按鈕,將其發送到Moodle及其帳戶信息。通過外部網站登錄到Moodle

一旦他們到達Moodle,Moodle會檢查賬戶信息是否已經存在。如果是這樣,它將登錄,否則它會創建帳戶和登錄。

我已經設置了Moodle環境,以及登錄網站。 Moodle網站不允許訪問登錄網站上的數據庫,用戶不必在任何時候再次輸入他們的信息。

我已經花了好幾個小時試圖從一個插件完成類似Moodle和社交網站(Facebook,Twitter,谷歌+等)之間的東西,但沒有取得進展,以及從一個插件鏈接Moodle和Joomla,我已經在這裏和其他論壇搜索了任何我能找到的東西,類似於我無法完成的事情。任何幫助將非常感激。

編輯:我忘了提,Moodle的版本是2.5.4

編輯:下面創建一個發佈到「登錄/ index.php文件」頁數據的新用戶。目前這是非常不完整的,並且在生產服務器上實施可能很危險。更新的版本將會在我繼續工作時發佈,建議更值得歡迎。

global $CFG, $DB; 
    require_once($CFG->dirroot.'/user/profile/lib.php'); 
    require_once($CFG->libdir.'/authlib.php'); 

    $newuser = $DB->get_record('user', array('id'=>'1')); 
    $newuser->auth = 'manual'; 
    $newuser->username = $frm->username; 
    $newuser->password = hash_internal_user_password($frm->password); 

    $newuser->username = $DB->insert_record('user', $newuser); 

    /// Save any custom profile field information 
    profile_save_data($newuser); 

    $newuser = $DB->get_record('user', array('id'=>$newuser->username)); 
    events_trigger('user_created', $newuser); 
+0

你可以發佈任何示例代碼,結構等到目前爲止? – Lizz

+0

現在我已經清除了標準的Moodle登錄結構。 在登錄網站端,我暫時使用表單並將其發佈到提交的Moodle登錄頁面。最終它會自動從登錄網站的數據庫中提取,但爲了測試,我手動輸入數據。 – chrisc

+1

@Lizz 我已經掌握了我所需要的基本功能。我會更新我的帖子以包含我使用的代碼,這些代碼非常不完整。我想我可以從其他地方找出其他問題,但我會繼續更新這篇文章,以幫助任何可能正在嘗試做我正在做的事情的人。 – chrisc

回答

1

使用外部數據庫身份驗證可能是最容易設置的,尤其是如果兩個系統都在同一臺服務器上。

去網站管理員>插件>身份驗證>管理插件 - >單擊取消隱藏按鈕旁邊的外部數據庫

然後點擊設置並添加連接細節爲你的數據庫,外部表的名稱(或如果數據來自多個表,則創建一個視圖)並添加字段映射。

http://docs.moodle.org/26/en/External_database_authentication

或者,我會使用SimpleSAML插件與LDAP - 假設你有一個LDAP服務器 - 需要大約一天的時間設置和做手腳的設置。

https://moodle.org/plugins/view.php?plugin=auth_saml

+1

Moodle網站不允許訪問登錄網站的數據庫。 – chrisc

0

有一個類似的問題,我想到一個辦法那

  • 讓主網站每天的基礎上創建報名信息的額外的數據庫。我想將其作爲SqLite文件提供,但似乎moodle外部數據庫插件不支持SqLite數據庫。

  • 取決於用戶名和主網站上的訪問控制邏輯顯示菜單中的「Moodle的」

  • 如果在「Moodle的」用戶點擊做一個POST請求與用戶名的Moodle登錄和之間的祕密令牌Moodle和主要網站。

  • 爲moodle實現了一個簡單的認證插件,它要求主站點確認用戶仍然登錄。它將爲此使用共享祕密標記。如果主站點未確認用戶已登錄,則重定向至主站點的登錄頁面。

但我不知道,如果

  • 的方法確實有效
  • 的做法是合適的
  • 的做法已經有人實現

我調查了SSO的東西像shiboleth,但它看起來相當複雜和難以實施,特別是因爲我們的主站點已經有一個uthentification方法。