注册后WordPress自动登录不起作用

时间:2014-08-03 作者:Overcode

我查阅了大量线程,试图找出如何在注册后自动登录用户,并得出了这个结论。

function automatically_log_me_in( $user_id ) {
    $user = get_user_by(\'id\',$user_id);
    $username = $user->user_nicename;
    $user_id = $user->ID;
    wp_set_current_user($user_id, $username);
    wp_set_auth_cookie($user_id);
    do_action(\'wp_login\', $username, $user);
    exit;
}
add_action( \'user_register\', \'automatically_log_me_in\' );
根据我看到的许多反应,wp_set_auth_cookiewp_set_current_user 单独使用ID应该足以让用户登录,但即使这样也无济于事。

有人知道我做错了什么吗?

5 个回复
SO网友:butlerblog

Short answer - 您的原始功能(大部分)正常工作。这是您编辑的函数,用于执行它需要执行的操作:

function automatically_log_me_in( $user_id ) {
    wp_set_current_user( $user_id );
    wp_set_auth_cookie( $user_id );
    wp_redirect( home_url( \'/some-ending-page/\' ) );
    exit(); 
}
add_action( \'user_register\', \'automatically_log_me_in\' );
Long answer - 下面解释一下为什么这是答案。

的建议wp_signon() 不会的。您需要用户凭据,除非传递凭据,否则该函数将尝试从表单中检索发布的用户名(“log”)和密码(“pwd”),我假设表单中缺少“pwd”。

其他答案提出了一些建议,但遗憾的是,这些建议并不适用于此特定情况。有几个建议是针对插件的。作为其中一个(WP成员)的开发人员,我非常希望您使用该插件,建议您使用wpmem_post_register_data 如果你不使用WP成员,对你没有任何好处。

使用wp_set_current_user() 因为你最初的想法是正确的;但是you need to redirect the user at the end 因此,它们被视为已登录。

这个user_register 操作传递刚注册的用户的ID,因此我不确定您为什么要更改$user_id 通过将其设置为$user->ID 当您已经拥有该值时。在原始函数中获取用户对象的唯一原因是获取用户名。这是的可选参数wp_set_current_user() 以及wp_login 这样我就不用担心了。(我会抛弃wp_login 操作,因为所做的一切就是在您的流程中加入一个钩子,让外部函数钩住。您是否想要/需要这需要比OP提供更多的信息。)IMO,所有这些都只是代码中的浪费位。

您的注册过程到此结束吗?已设置身份验证cookie,并且用户已登录。但是,只有在下一个页面请求时才会读取,因此您需要将用户重定向到您希望他们使用的任何页面wp_redirect() 之后,您需要exit().

SO网友:phpsmashcode

我正在用一个自定义注册表注册用户,该注册表直接指向wp登录。php

那么你可以使用wp_signon 作用提供建议其他解决方案的更多详细信息。

SO网友:matthew

我正在使用自定义注册表注册用户,该注册表指向wp-login.php. 是这样吗?

尝试以下功能之一。您可以在第一个页面中选择重定向到哪个页面。第二个更像您尝试的那个。他们可能会工作或提供帮助。

add_action( \'tml_new_user_registered\', \'tml_new_user_registered\' );
function tml_new_user_registered( $user_id ) {
    wp_set_auth_cookie( $user_id, false, is_ssl() );
    wp_redirect( admin_url( \'profile.php\' ) );
    exit;
}

add_action( \'wpmem_post_register_data\', \'my_registration_hook\', 1 );
function my_registration_hook( $fields ) {
    $user_login = $fields[\'username\'];
    $user_id = $fields[\'ID\'];

    wp_set_current_user( $user_id );
    wp_set_auth_cookie( $user_login );
    do_action( \'wp_login\', $user_login );

    wp_set_current_user( $fields[\'ID\'] );
}

SO网友:youcantexplainthat

在将任何头发送到客户端之前,需要运行此代码。尝试隔离登录代码。

这个问题已经问了将近一年了,所以如果有什么有用的话,请告诉我们。

SO网友:user1075397

这对我有用。我正在使用WP成员插件(和挂钩)。

add_action( \'wpmem_post_register_data\', \'my_registration_hook\', 1 );
function my_registration_hook( $fields ) {
    wp_set_current_user( $fields[\'ID\'] );
    $creds = array(
        \'user_login\'    => $fields[\'username\'],
        \'user_password\' => $fields[\'password\'],
        \'rememember\'    => false
    );
    wp_signon( $creds, false );
}

结束

相关推荐

Authentication over CURL

我正在为WordPress网站开发API。基本上,外部应用程序(不是使用WP创建的)能够将JSON发送到我创建的文件中(api.php) 在该文件中,我加载WP(使用wp-load.php), 并基于收到的JSON创建一个post(自定义post类型)。当我看到这段代码时。。。$formation_fr = wp_insert_post( array( \'post_type\' => \'formation\', \'post_title\' => \'exa