2010-02-16 124 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将结果限制为活跃用户 - 你可以离开了这一点,当然,如果你真的要允许登录到禁用帐户;)