2010-02-16 125 views
3

編程方式登錄的用戶,我試圖登錄用戶爲表單提交的一部分,但爲什麼下面不工作:的Drupal 6

$user = db_fetch_object(db_query("SELECT * FROM users WHERE mail = '%s' AND pass = '%s'", $mail, md5($pass))); 

if ($user) { 
    // Authenticate user and log in 
    $params = array(
     'name' => $user->name, 
     'pass' => trim($user->pass) 
    ); 

    // Authenticate user  
    $account = user_authenticate($params); 
} 

如果我傾倒$用戶,我可以看到正確的值,但如果我轉儲帳戶是空的。

回答

4

您傳遞散列密碼'user_authenticate()「,而函數需要清除密碼(它將通過´user_load()´加載帳戶時間接哈希它本身)。

因此改變你的$參數數組聲明

$params = array(
    'name' => $user->name, 
    'pass' => $pass 
); 

應該讓你的榜樣工作。


順便說一句,你可以使用user_load()自己,以避免直接查詢數據庫:

$user = user_load(array('mail' => $mail, 'pass' => trim($pass), 'status' => 1)); 

(該'status' => 1將結果限制爲活躍用戶 - 你可以離開了這一點,當然,如果你真的要允許登錄到禁用帳戶;)