如何从社交登录注册用户那里获取用户元信息?

时间:2013-04-23 作者:tobe

看起来,社交登录插件(如Wordpress社交登录、OneAll等)不会在原始wp数据库中创建用户,作为从管理仪表板的常规注册。因此,无法以“正常方式”从当前用户添加或获取用户元数据。

Question is: How to get user-meta from Social Login registered users?

我现在有一个案子,还没有找到答案。希望你能帮助我。

The case在本例中,我们有一个Gravityform,它允许注册用户提交新页面。我们希望他们每个用户只提交一个页面。页面标题是自动创建的,并且表单条目ID作为页面标题的唯一部分(Gravityforms设置)。下面的函数用于生成Gravityforms以创建页面而不是帖子:

add_filter("gform_post_data", "change_post_type", 10, 2);
function change_post_type($post_data, $form){
    //only change post type on form id 1
    if($form["id"] != 2)
       return $post_data;

    $post_data["post_type"] = "page";
    return $post_data;
}
现在,我们希望已成功完成表单并且当前已登录的用户显示其创建页面的url,如www.example。com/pagenumber{条目ID}因此有3个选项可显示:

用户已登录并已创建页面->显示页面url用户已登录且尚未创建页面->显示表单->完成后重定向到点1用户未登录->显示社交登录按钮->连接后重定向到点2首先我们需要将表单条目ID添加到用户元:

add_action( \'gform_after_submission\', \'wpse96480_map_user_to_page\', 10, 2);

    function wpse96480_map_user_page( $entry, $form ) {
        $user_id = $entry[\'created_by\'];
        $meta_key = \'generated_page_id\';
        $meta_value = $entry[\'post_id\'];
        $unique = true;
        add_user_meta( $user_id, $meta_key, $meta_value, $unique );
    }
现在,我们将下面的代码添加到页面中。php(或页面模板文件)检查当前用户是否已登录并在用户元中有条目ID,如果有,则显示带有条目ID的url:

<?php
    if ( is_user_logged_in() ) {
        global $current_user;
        // $current_user = get_currentuserinfo();
        $user_id = $current_user->ID;
        $meta_key = \'gform_entry_id\';
        $single = true;
        $entry_id = get_user_meta( $user_id, $meta_key, $single );
        if( strlen( $entry_id ) > 0 && is_numeric( $entry_id ) ) {
            // we have an entry ID now
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, thank you for submitting the form. Visit your page here: www.example.com/pagenumber<?php echo( $entry_id ); ?></h2>
            <?php
        } else {
            // we don\'t have an entry ID for this user
            ?>
            <h2>Hey <?php echo $current_user->display_name ?>, Thank you for joining. To create a page please submit the form below:</h2><?php echo do_shortcode(\'[gravityform id="2" name="just a form" title="false" description="false"]\'); ?>
            <?php
        }
    } else {
        // user is not logged in
        ?>
        <h2><Please log in to create a page <?php do_action( \'wordpress_social_login\' ); ?></h2>
        <?php
    }
?>
The result:如果有一个普通注册的WP用户(由管理员在管理仪表板中创建)登录,并成功完成表单,则选项(1)有效/成功,如我们所愿显示。如果用户尚未填写表单,则选项(2)有效/成功显示。

The problem with Social Login users:如果通过社交登录插件注册的用户已登录,并且已成功完成表单,则选项(2)仍显示为“用户从未完成表单”。

Question:如何从社交登录注册用户获取用户元**

1 个回复
最合适的回答,由SO网友:Ralf912 整理而成

您没有指定正在使用的插件。但是,如果用户使用OAuth(由mosts社交平台使用)登录,则无法登录WordPress。

Why?

用户需要用户名和password 登录。OAuth(和其他方法)不提供密码。他们只回答“是”,该用户已授权,或“否”,未授权。

如果用户从博客请求新页面,社交登录插件需要一种方法来重新识别用户。他们必须存储一些信息,告诉他们该用户已登录。WordPress使用cookie。另一种方法是启动会话。有点奇怪的方法可以使用数据库和ip地址。我不知道你的社交登录插件是如何重新识别用户的,但这是找出你的公式不起作用的重要一点。

Why is the user not longer logged in?

我猜插件失去了与重新识别方法的连接。表示无法读取cookie或会话已停止/销毁。

Possible solution

显示公式时,如果用户使用社交登录登录,请在WordPress中注册一个新用户并登录该用户。这可能是一个虚拟用户,不需要真正的用户名。检查当前用户是否使用社交登录登录,获取用户数据(例如用户名),从此用户数据创建哈希,将此哈希用作用户名and 暗语下次用户使用社交登录登录时,挂接到此过程,获取用户数据,创建哈希并检查是否存在使用此哈希的用户。

您还可以尝试了解社交登录如何重新识别用户,以及在公式完成后为什么不重新识别用户。

结束

相关推荐

force login loophole

我想限制对WordPress网站的访问,只允许注册用户访问。我尝试了以下插件:它们都有相同的问题:在看到登录页面后,您可以轻松地在浏览器地址栏中重新键入URL,以绕过登录屏幕,直接访问主页,而无需登录。只有主页可以通过这种方式访问。单击任何菜单,将返回登录屏幕。我怀疑我的网站有问题,而不是插件有问题。我有以下活动插件:高级自定义字段Akismet分析360自定义帖子模板登录重定向选择问题(&L);A-WordPress问答插件原始HTML Relevanssi版本控制快速类型搜索(Swiftype Sea