drupal 7 以编程方式将用户登录

2022-08-30 22:43:57

刚刚注册了一个新帐户并创建了一个配置文件后,我将如何登录用户?

我试过:

global $user;
$user = user_load($account->uid);

global $user;
$user = user_load(array('mail' => $_POST['email'], 'pass' => trim($_POST['password'])));

但两者都不起作用,第二个导致关于array_flip的错误。


答案 1

我将回答这个问题以供将来参考,因为上面的第三个答案是错误的,第一个答案将起作用,但没有必要(它复制了用户提交登录表单,调用所有验证器等的体验,并且假设您已经完成了该验证,否则您将不会尝试直接登录用户。

这将按预期工作,假设您拥有自己的表单或功能,并且您知道用户未登录:$username$password

if ($uid = user_authenticate($username, $password)) {
  global $user;
  $user = user_load($uid);

  $login_array = array ('name' => $username);
  user_login_finalize($login_array);
}

首先验证您拥有的用户名和密码。如果返回非零 UID,则身份验证成功。创建一个数组,该数组提供原始登录表单中可能必需的信息,并将其传递给 user_login_finalize(),后者将完成所有其余工作(不仅重新生成会话,还正确记录登录,并调用登录挂钩)。


答案 2

Drupal使用user_login_submit user_login_finalize来完成它,您可以使用以下代码自己调用相同的内容:

$form_state['uid'] = $account->uid;
user_login_submit(array(), $form_state);

推荐