Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中通过Facebook注册帐户_Php_Facebook_Facebook Php Sdk - Fatal编程技术网

在PHP中通过Facebook注册帐户

在PHP中通过Facebook注册帐户,php,facebook,facebook-php-sdk,Php,Facebook,Facebook Php Sdk,大多数人都在寻找Facebook的登录系统,但这不是我的目的。我一直在通过OAuth2.0阅读Facebook的登录系统,但我正在寻找一个注册系统。我也读过类似Facebook的注册系统,在那里你可以得到一个类似Facebook的表单——同样,不要找这个 我感兴趣的是: 用户转到我的网站的本地注册页面 用户将显示通用注册字段和注册Facebook按钮 如果用户决定使用Facebook按钮,他会自动跳过常规方法 用户单击Facebook注册按钮 我通过oAuth ID、昵称、电子邮件以某种方式获取

大多数人都在寻找Facebook的登录系统,但这不是我的目的。我一直在通过OAuth2.0阅读Facebook的登录系统,但我正在寻找一个注册系统。我也读过类似Facebook的注册系统,在那里你可以得到一个类似Facebook的表单——同样,不要找这个

我感兴趣的是:

用户转到我的网站的本地注册页面 用户将显示通用注册字段和注册Facebook按钮 如果用户决定使用Facebook按钮,他会自动跳过常规方法 用户单击Facebook注册按钮 我通过oAuth ID、昵称、电子邮件以某种方式获取所有数据,并将用户注册到我自己的数据库中 一旦用户从Facebook返回到我的网站回调URI,他们就可以为自己的帐户设置密码 用户通过正常登录页面在我的网站上使用正常帐户登录 标有的列表项是我难以实现和理解的步骤

所以基本上,我不想每次有用户访问我的网站时都依赖Facebook。我只想使用Facebook一次,然后该帐户是独立的

如果这是一个糟糕的方法,请让我知道为什么,并告诉我大多数人是如何做到这一点的。如果有人能帮我解决这个问题,我将非常感激


我的应用程序是用PHP编写的,数据库管理系统是MySQL。

基本上,您不希望发生的主要事情是您的用户需要使用两个不同的系统登录到您的应用程序。他们应该能够选择一种方法,然后继续使用它,而不必使用其他方法

如果用户选择使用本机登录,则由您控制并将其信息插入数据库。它可能带有用户名+密码,因此当他们返回时,您可以将他们的登录表单与您存储的数据相匹配,并像那样验证他们的身份

如果用户选择Facebook作为登录方式,他们将被重定向到Facebook应用程序登录,获得身份验证,返回到您的站点回调URI,然后您将能够从Facebook的Graph API中提取他们的信息,并将您需要的信息保存到数据库中以备将来使用,这样您就不需要再次从Facebook请求该数据。比如用户的名字,生日等等。。。不会改变的事情

您仍然需要为您的数据库使用用户的某些唯一标识字段,我建议您使用他们的Facebook用户id

当Facebook用户返回到您的站点时,他们仍然会单击Facebook登录按钮,并且仍然会经历与以前相同的过程。只有这一次,Facebook知道他们已经使用此应用程序进行了身份验证,因此登录过程在幕后处理,用户到达您已经登录的站点。从那里你需要做的就是知道该用户的id是什么/me,就这样

我应该提到的另一种情况是,当用户到达您的站点时,完全从Facebook注销。在这种情况下,您仍然会显示一个使用Facebook按钮的登录,当用户进入Facebook登录流时,他们将被要求首先登录Facebook。一旦完成,仍然是流程的一部分,用户将被重定向回应用程序登录,然后一次性返回到您的站点。这是Facebook处理的事情,你根本不需要担心

笔记 您不需要额外的密码。。。这将抵消整个一键轻松登录的魔力,使Facebook登录插件如此有效


基本上,您不希望发生的主要事情是您的用户需要使用两个不同的系统登录到您的应用程序。他们应该能够选择一种方法,然后继续使用它,而不必使用其他方法

如果用户选择使用本机登录,则由您控制并将其信息插入数据库。它可能带有用户名+密码,因此当他们返回时,您可以将他们的登录表单与您存储的数据相匹配,并像那样验证他们的身份

如果用户选择Facebook作为登录方式,他们将被重定向到Facebook应用程序登录,获得身份验证,返回到您的站点回调URI,然后您将能够从Facebook的Graph API中提取他们的信息,并将您需要的信息保存到数据库中以备将来使用,这样您就不需要再次从Facebook请求该数据。比如用户的名字,生日等等。。。不会改变的事情

您仍然需要为您的数据库使用用户的某些唯一标识字段,我建议您使用他们的Facebook用户id

当Facebook用户返回您的站点时,他们仍然会单击Facebook登录按钮a nd仍然要经历与以前相同的过程-只是这一次,Facebook知道他们已经使用该应用程序进行了身份验证,因此登录过程在幕后进行,用户到达您已经登录的站点。从那里你需要做的就是知道该用户的id是什么/me,就这样

我应该提到的另一种情况是,当用户到达您的站点时,完全从Facebook注销。在这种情况下,您仍然会显示一个使用Facebook按钮的登录,当用户进入Facebook登录流时,他们将被要求首先登录Facebook。一旦完成,仍然是流程的一部分,用户将被重定向回应用程序登录,然后一次性返回到您的站点。这是Facebook处理的事情,你根本不需要担心

笔记 您不需要额外的密码。。。这将抵消整个一键轻松登录的魔力,使Facebook登录插件如此有效


我建议查看我所问问题中的源代码:

在用户登录并验证您的站点以访问其配置文件信息后,您将对以下部分特别感兴趣:

` $user_profile=$facebook->api'/me','GET'

        function test_input($data) {
            $data = trim($data);
            $data = stripslashes($data);
            $data = htmlspecialchars($data);
            return $data;
        }

        $id = test_input($user_profile['id']);
        $name = test_input($user_profile['name']);
        $first_name = test_input($user_profile['first_name']);
        $last_name = test_input($user_profile['last_name']);
        $link = test_input($user_profile['link']);
        $username = test_input($user_profile['username']);
        $gender = test_input($user_profile['gender']);
        $email = test_input($user_profile['email']);
        $timezone = test_input($user_profile['timezone']);
        $locale = test_input($user_profile['locale']);
        $verified = test_input($user_profile['verified']);

        $table_name= $wpdb->prefix . "fcm_fbusercreds";
        $currentmember_result = $wpdb->get_results(
            "
            SELECT *
            FROM $table_name
            WHERE id = $id
            "
        );

        if(empty($currentmember_result)){
            $wpdb->insert( $table_name, array( 'lastupdated' => current_time('mysql'), 'id' => $id, 'name' => $name, 'first_name' => $first_name, 'last_name' => $last_name, 'link' => $link, 'username' => $username, 'gender' => $gender, 'email' => $email, 'timezone' => $timezone, 'locale' => $locale, 'verified' => $verified, 'coach' => "0" ) );
        } else {
            foreach ($currentmember_result as $result){
                $wpdb->update( $table_name, array( 'lastupdated' => current_time('mysql'), 'name' => $name, 'first_name' => $first_name, 'last_name' => $last_name, 'link' => $link, 'username' => $username, 'gender' => $gender, 'email' => $email, 'timezone' => $timezone, 'locale' => $locale, 'verified' => $verified, 'coach' => "0" ), array( 'id' => $result->id ) );
            }
        }
`

代码解析Facebook用户配置文件信息,然后将用户记录添加到数据库中,或者更新数据库中的用户配置文件


如果你不打算保留将来使用的权限,那么我相信你可以将你的应用程序从对用户配置文件的权限中删除。您需要进一步研究这一点。

我建议您查看我所问问题中的源代码:

在用户登录并验证您的站点以访问其配置文件信息后,您将对以下部分特别感兴趣:

` $user_profile=$facebook->api'/me','GET'

        function test_input($data) {
            $data = trim($data);
            $data = stripslashes($data);
            $data = htmlspecialchars($data);
            return $data;
        }

        $id = test_input($user_profile['id']);
        $name = test_input($user_profile['name']);
        $first_name = test_input($user_profile['first_name']);
        $last_name = test_input($user_profile['last_name']);
        $link = test_input($user_profile['link']);
        $username = test_input($user_profile['username']);
        $gender = test_input($user_profile['gender']);
        $email = test_input($user_profile['email']);
        $timezone = test_input($user_profile['timezone']);
        $locale = test_input($user_profile['locale']);
        $verified = test_input($user_profile['verified']);

        $table_name= $wpdb->prefix . "fcm_fbusercreds";
        $currentmember_result = $wpdb->get_results(
            "
            SELECT *
            FROM $table_name
            WHERE id = $id
            "
        );

        if(empty($currentmember_result)){
            $wpdb->insert( $table_name, array( 'lastupdated' => current_time('mysql'), 'id' => $id, 'name' => $name, 'first_name' => $first_name, 'last_name' => $last_name, 'link' => $link, 'username' => $username, 'gender' => $gender, 'email' => $email, 'timezone' => $timezone, 'locale' => $locale, 'verified' => $verified, 'coach' => "0" ) );
        } else {
            foreach ($currentmember_result as $result){
                $wpdb->update( $table_name, array( 'lastupdated' => current_time('mysql'), 'name' => $name, 'first_name' => $first_name, 'last_name' => $last_name, 'link' => $link, 'username' => $username, 'gender' => $gender, 'email' => $email, 'timezone' => $timezone, 'locale' => $locale, 'verified' => $verified, 'coach' => "0" ), array( 'id' => $result->id ) );
            }
        }
`

代码解析Facebook用户配置文件信息,然后将用户记录添加到数据库中,或者更新数据库中的用户配置文件


如果你不打算保留将来使用的权限,那么我相信你可以将你的应用程序从对用户配置文件的权限中删除。您需要进一步研究。

密码问题您说得对,谢谢您指出这一点。现在我明白了这个过程是如何进行的;我没有意识到我必须调用Facebook的API。如果我试图解释我到底是怎么想的,我肯定会失败的——我脑子里有一些奇怪的想法。不管怎样,假设一个用户通过Facebook注册,我只在注册页面提供这个按钮,用户注销了他的Facebook帐户,用户来到我的网站。。。。会发生什么?在这种情况下,我必须在我的登录页面中提供Facebook按钮登录吗?谢谢您的帮助。@Dugi-是的,您将始终显示“使用Facebook登录”按钮,但如果用户甚至没有登录Facebook,他们将被要求这样做,作为Facebook登录流的一部分。。。他们会先登录Facebook,然后一次性登录你的应用程序。这是一个很好的后续问题-我会在我的回答中加上一个注释..到目前为止,很好,我几乎做到了。我仍然需要知道的是,如果从注册页面中删除“使用Facebook注册”按钮,并将其替换为登录页面中显示“通过Facebook登录”或类似内容的按钮,这是否是一个好主意。如果您能为我展示一些真实世界的例子来说明我们在PHP中所讨论的内容,我也将不胜感激。我也计划在Twitter和谷歌上实现这个想法,但我想这是相似的。到目前为止,我已经在所有提到的服务中注册了应用程序。密码问题你说得对,谢谢你指出这一点。现在我明白了这个过程是如何进行的;我没有意识到我必须调用Facebook的API。如果我试图解释我到底是怎么想的,我肯定会失败的——我脑子里有一些奇怪的想法。不管怎样,假设一个用户通过Facebook注册,我只在注册页面提供这个按钮,用户注销了他的Facebook帐户,用户来到我的网站。。。。会发生什么?在这种情况下,我必须在我的登录页面中提供Facebook按钮登录吗?谢谢您的帮助。@Dugi-是的,您将始终显示“使用Facebook登录”按钮,但如果用户甚至没有登录Facebook,他们将被要求这样做,作为Facebook登录流的一部分。。。他们会先登录Facebook,然后一次性登录你的应用程序。这是一个很好的后续问题-我会在我的回答中加上一个注释..到目前为止,很好,我几乎做到了。我仍然需要知道的是,如果从注册页面中删除“使用Facebook注册”按钮,并将其替换为登录页面中显示“通过Facebook登录”或类似内容的按钮,这是否是一个好主意。如果你给我看一些真正的wo,我也会很感激的
我们在PHP中讨论的rld示例。我也计划在Twitter和谷歌上实现这个想法,但我想这是相似的。到目前为止,我已经在所有提到的服务中注册了应用程序。我忘了在这上面提到一些东西。。。我的代码是特定于Wordpress的。如果不使用Wordpress写入数据库,则需要修改该代码。我忘了在这方面提到一些内容。。。我的代码是特定于Wordpress的。如果不使用Wordpress写入数据库,则需要修改该代码。