2012-06-06 47 views
1

我正嘗試使用身份驗證插件在moodle中手動驗證用戶,但我不明白整個進程需要的所有工作。所以,關於我在這裏失蹤的一些建議將會非常有幫助!Moodle身份驗證插件。我錯過了什麼?

我創建了插件,啓用它,並且它工作,但僅限於某些情況,這就是我的問題所在。我的猜測是,在某些時候,我需要實際調用一個將用戶信息保存在moodle數據庫中的函數。但是,我不知道它在哪裏,或者它是如何工作的。所以......專家,請在這裏幫我一把。

以下是我在身份驗證插件中更改的兩個功能。 (auth.php)

function loginpage_hook() { 
    global $CFG, $DB, $user, $frm, $errormsg; 
    $IsAuthenticated = false; 
    if(isset($_COOKIE["AUTHENTICATION_KEY"])){ 
     $json = file_get_contents("WWW.WEBSERVICEURL.COM",true); 
     //getting the file content 
     $decode = json_decode($json, true); 
     //getting the file content as array 
     if($decode["AuthFlag"]){ 
      $ucUser = $decode["Username"]; 
      $user = $DB->get_record('user', array('username'=>$ucUser, 'mnethostid'=>$CFG->mnet_localhost_id)); 
      $frm->username = $ucUser; 
      $IsAuthenticated = true; 
     } 
    } 
    if(!$IsAuthenticated && empty($frm->username)){ 
     $errormsg = "."; 
    } 
} 

/** 
* Returns true if the username and password work or don't exist and false 
* if the user exists and the password is wrong. 
* 
* @param string $username The username 
* @param string $password The password 
* @return bool Authentication success or failure. 
*/ 
function user_login ($username, $password) { 
    global $CFG, $DB, $user; 
    if(!$user){ return false; } 

    if(isset($_COOKIE["AUTHENTICATION_KEY"])){ 
     $json = file_get_contents("WWW.WEBSERVICEURL.COM", true); 
     //getting the file content 
     $decode = json_decode($json, true); 
     //getting the file content as array 
     if($decode["AuthFlag"]){ 
      $ucUser = $decode["Username"]; 
      if($user->username = $ucUser){ return true; } 
     } 
    } 

    return false; 
} 
+0

我無法確切地知道你的問題在哪裏,你想達到什麼目的。你能更具體一點嗎? – limoragni

+0

我的問題是,當我嘗試手動驗證用戶(即使是web服務)時,它不適用於不在moodle數據庫中的用戶(如果這樣做的話)。所以,我正在尋找的是在moodle數據庫中創建用戶,以便我的手動身份驗證可以工作。類似的東西。但我實際上找到了一種解決方法,已經在使用的LDAP插件創建了這個moodle用戶,所以...當試圖使用我的插件時,如果用戶不存在,我告訴moodle使用LDAP,下次,由於用戶現在已經創建,我的插件工作。感謝你的幫助! – Naner

回答

2

我最近做了一個auth插件。我想代碼的關鍵片段,你缺少的是這樣的:

$user = authenticate_user_login($username, null); 

     $newuser = new stdClass(); 
     $newuser->id = $user->id; 
     $newuser->email = $mail; 
     $newuser->username = $mail; 
     $newuser->country = 'AR'; 
     $newuser->city = 'capital federal'; 
     $newuser->firstname = $nombre; 
        $newuser->lastname = $apellido; 

     $DB->update_record('user', $newuser); 

     $user = authenticate_user_login($mail, null); 
     complete_user_login($user); 

的關鍵功能有authenticate_user_login($username, null)。你可以通過任何用戶名,如果用戶名不存在,它會創建一個空的用戶,準備填補。

我有插件工作得很好。所以如果你需要某些東西,或者你想分享你的代碼,那麼我可以理解問題出在哪裏,歡迎你!

+0

是否有可能讓任何使用moodle登錄的學校的學生使用他們的moodle登錄?例如,我有一本大學書籍租借應用程序,id喜歡有一個「用moodle登錄」按鈕。可能? – ChuckKelly

+0

我認爲是可能的,但我不知道是否有像插件那樣做。由於Moodle是開源的,你可以在Moodle上添加一個服務來完成認證。但並不那麼容易! – limoragni

相關問題