自定义连接到Facebook,登录/注销时出现问题

时间:2014-04-17 作者:Gixty

我正在开发一个自定义功能,用于通过facebook登录我的用户。

我开始阅读这篇关于如何通过Facebook登录的精彩教程:http://digitalzoomstudio.net/2013/02/09/tutorial-how-to-login-via-facebook-in-your-wordpress-blog/

如果WordPress博客中已经存在一个带有他/她的facebook电子邮件的帐户,该功能会将用户登录到WordPress。如果它不存在,它将自动为用户创建一个帐户。

一切正常。然而,我在登录和注销时遇到了一个问题。

有一个“使用Facebook登录”按钮。如果用户登录,此按钮将变为注销(此注销按钮应用于从facebook注销用户)。

一个问题(登录):

  • 用户第一次单击“使用Facebook登录”按钮时,用户登录到WordPress博客;然而,Facebook API不会识别用户,因此Facebook登录按钮输出的是登录按钮,而不是注销按钮。

    第二次,用户单击“登录”按钮,Facebook API识别用户,按钮变为注销。

    那么,为什么用户第一次没有被facebook识别,而第二次却被facebook识别?

    另一个问题是(注销):

    • 一旦用户第一次登录时点击facebook登录按钮,并想通过定制的注销按钮从我的WordPress博客注销(该按钮应该只用于从博客注销用户,而不是从facebook注销用户),它就可以完美地工作!

      但是,如果用户再次单击facebook登录按钮登录,则必须单击定制的注销按钮两次才能成功注销用户。

      我知道如何部分解决这个问题。我可以检查用户是否登录了博客,然后删除登录按钮;然而,我想知道为什么我从facebook上得到这种奇怪的行为,以及它是如何与我的博客相冲突的。

      更新第二个问题(当用户注销时),我找到了解决方案。我只是想破坏facebook会话$facebook->destroySession();

      更新2:已解决

      我提供的链接中的教程在登录后以及出于某种原因创建新帐户时破坏了facebook会话。我只是不得不搬走$facebook->destroySession(); 从这两部分开始,现在一切都按预期进行。

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

我提供的链接中的教程是在登录并出于某种原因创建新帐户后销毁facebook会话。我只需删除$facebook->destroySession();从这两部分开始,现在一切都按预期进行。

下面是教程中的代码,注释掉了这两行代码。

if ($fbuser) {


    $fb_registerpage_name = __(\'Facebook Register\', \'bloora\');
    $fbpage = get_page_by_title( $fb_registerpage_name );

    if(isset($user_profile[\'email\'])){
        $user_name = $user_profile[\'email\'];
        $user_email = $user_profile[\'email\'];
        $user_id = username_exists( $user_name );
        if ( !$user_id and email_exists($user_email) == false ) {
                $random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
                $user_id = wp_create_user( $user_name, $random_password, $user_email ); 
                wp_set_current_user( $user_id );
                wp_set_auth_cookie( $user_id );
               // $facebook->destroySession(); THIS HAS TO BE REMOVED

        } else {
                $random_password = __(\'User already exists.  Password inherited.\');

                wp_set_current_user( $user_id );
                wp_set_auth_cookie( $user_id );
               // $facebook->destroySession(); THIS HAS TO BE REMOVED!
        }
    }else{

        if(!is_admin() && isset($_POST) && count($_POST) > 0){

            if($fbpage){

                echo \'<script>if(window.location.href != "\'.get_permalink($fbpage->ID).\'"){ window.location.href = "\'.get_permalink($fbpage->ID).\'"; }</script>\';
            }else{
                // Create post object
                $my_post = array(
                  \'post_title\'    => $fb_registerpage_name,
                  \'post_content\'  => \'This is my post.\',
                  \'post_status\'   => \'publish\',
                  \'post_type\'   => \'page\',
                  \'post_author\'   => 1
                );

                // Insert the post into the database
                $fbpage = wp_insert_post( $my_post );
                echo \'<script>if(window.location.href != "\'.get_permalink($fbpage->ID).\'"){ window.location.href = "\'.get_permalink($fbpage->ID).\'"; }</script>\';

            }
        }
    }
}

结束

相关推荐

How to override wp-login.php

我想覆盖默认WordPress登录页:wp-login.php.原因是,我想在文件的顶部编写一些自定义代码,检查后端的一些条件,并执行诸如将用户重定向到其他页面之类的操作。我想这样做是因为我想在自定义文件中执行自己的身份验证逻辑,而不显示默认的WordPress登录表单。我的逻辑包括解析一些cookie和会话数据(特别是没有登录表单,可能是自定义表单)。我真的想把我的逻辑写在header.php 子主题的文件,但不幸的是wp-login.php 文件不包括主题的头文件。我不想编辑wp-login.php