首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Drupal7以编程方式让用户登录

Drupal7以编程方式让用户登录
EN

Stack Overflow用户
提问于 2011-11-10 18:42:47
回答 5查看 23K关注 0票数 17

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

我试过了:

代码语言:javascript
复制
global $user;
$user = user_load($account->uid);

代码语言:javascript
复制
global $user;
$user = user_load(array('mail' => $_POST['email'], 'pass' => trim($_POST['password'])));

但是这两种方法都不起作用,第二种方法会导致关于array_flip的错误。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-12 04:50:31

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

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

代码语言:javascript
复制
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(),它完成所有其余工作(不仅重新生成会话,还正确记录登录,并调用登录挂钩)。

票数 29
EN

Stack Overflow用户

发布于 2011-11-10 20:18:50

Drupal使用user_login_submit中的user_login_finalize完成此操作,您可以使用以下代码自己调用相同的功能:

代码语言:javascript
复制
$form_state['uid'] = $account->uid;
user_login_submit(array(), $form_state);
票数 14
EN

Stack Overflow用户

发布于 2012-09-20 23:32:48

您可以使用以下代码以编程方式登录D7。

代码语言:javascript
复制
global $user;
$user = user_load($uid);
drupal_session_regenerate();

它应该使用给定的用户id登录用户。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8078266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档