代码之家  ›  专栏  ›  技术社区  ›  Martin Andersson

手动登录用户

  •  1
  • Martin Andersson  · 技术社区  · 15 年前

    我在一个Drupal网站上工作,我允许用户在发布内容的同时登录。我已经成功地在原始表单中添加了电子邮件和密码字段,但我仍然坚持要如何实际登录用户。(我的计划是在创建内容之前,在验证步骤中进行此操作,以使登录的用户拥有该内容)。

    我可以在user.module api中找到三个看起来正确的函数:

    现在,我的问题是它是哪一个?我走对了吗?

    1 回复  |  直到 15 年前
        1
  •  6
  •   googletorp    15 年前

    一旦您检查了用户名/密码,并发现它们已验证并获得 $uid 对于用户,您可以这样做:

    $account = user_load($uid))
    global $user;
    $user = $account;
    user_authenticate_finalize($form_state['values']);
    

    所以你覆盖了全球 $user 对象与调用 user_authenticate_finalize .

    更新:
    通过一个步骤进行验证和登录如下:

    $account = user_load(array(
      'name' => $form_values['name'],
      'pass' => trim($form_values['pass']),
      'status' => 1)
    );
    if ($account && !drupal_is_denied('mail', $account->mail) {
      global $user;
      $user = $account;
      user_authenticate_finalize($form_state['values']);
    }
    else {
      // Raise validation error.
    }