如何让用户仅使用user_id登录Wordpress


How to log a user in to Wordpress using only their user_id

有什么方法可以让Wordpress用户只在给定的wp user_ID中登录吗?

我向用户发送电子邮件以确认一些事情,当他们点击给定的链接进入网站时,他们需要登录才能看到我带他们去的页面,所以我必须让用户登录,然后进行标题重定向。

我需要wordpress提供的php函数,一个我可以在php中使用的函数,你能不能也给我一些额外的细节,告诉我如何实现它(如果有的话)

这里有一个自动记录用户(未测试)的函数:

function auto_login() {
    if (!is_user_logged_in()) {
        //determine WordPress user account to impersonate
        $user_login = 'guest';
       //get user's ID
        $user = get_userdatabylogin($user_login);
        $user_id = $user->ID;
        //login
        wp_set_current_user($user_id, $user_login);
        wp_set_auth_cookie($user_id);
        do_action('wp_login', $user_login);
    }
}

您必须在wp_login钩子中传递2个参数。参见Wp编码

wp_set_current_user( $user_id, $user->user_login );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $user->user_login, $user );

创建单独的表来存储您发送的所有链接和相应的临时身份验证代码,这些代码可能只在一段时间内有效,然后将该临时身份验证码和电子邮件作为url参数-传递

编写一个基于临时身份验证代码的代码来验证用户,这样一旦用户点击电子邮件,您就可以重定向他。

WordPress插件无密码临时登录实现了这一点,并根据您的评论提供了唯一的哈希/密钥。

开放源代码在这里:https://plugins.trac.wordpress.org/browser/temporary-login-without-password/trunk/public/class-wp-temporary-login-without-password-public.php

    public function init_wtlwp() {
          if ( ! empty( $_GET['wtlwp_token'] ) ) {
                    $wtlwp_token = sanitize_key( $_GET['wtlwp_token'] );  // Input var okay.
                    $users       = Wp_Temporary_Login_Without_Password_Common::get_valid_user_based_on_wtlwp_token( $wtlwp_token );
                    $temporary_user = '';
                        if ( ! empty( $users ) ) {
                            $temporary_user = $users[0];
                        }
                        if ( ! empty( $temporary_user ) ) {
                            $temporary_user_id = $temporary_user->ID;

这是一个非常糟糕的想法。考虑一下:您向用户A和B发送一封电子邮件,其中包含以下链接:

http://wordpressblog.exp/fromemail?user_id=A;
http://wordpressblog.exp/fromemail?user_id=B;

如果用户B用A的user_id替换他的用户id,则他可以访问用户A的帐户。你最好构建一个散列,以这种方式记录用户