drupal 7以编程方式登录用户

Fel*_*Eve 17 php login drupal-7

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

我试过了 :

global $user;
$user = user_load($account->uid);
Run Code Online (Sandbox Code Playgroud)

要么

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

但是没有工作,第二个导致有关array_flip的错误.

Ken*_*Ken 27

我将回答这个问题以供将来参考,因为上面的第三个答案是错误的,第一个答案是有效的,但是没有必要(它复制了用户提交登录表单,调用所有验证器等的经验,并且可能是你有已经完成了验证,或者您不会尝试直接登录用户.

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

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

  $login_array = array ('name' => $username);
  user_login_finalize($login_array);
}
Run Code Online (Sandbox Code Playgroud)

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


Cli*_*ive 14

Drupal使用user_login_finalizefrom 来做user_login_submit,你可以用这段代码自己调用同样的东西:

$form_state['uid'] = $account->uid;
user_login_submit(array(), $form_state);
Run Code Online (Sandbox Code Playgroud)


ano*_*ohn 8

您可以使用以下代码在D7中以编程方式登录.

global $user;
$user = user_load($uid);
drupal_session_regenerate();
Run Code Online (Sandbox Code Playgroud)

这应该使用给定的用户ID登录用户.