使用 Facebook Connect 验证用户身份

2023-09-16 1436阅读

温馨提示:这篇文章已超过551天没有更新,请注意相关的内容是否还可用!

最近有很多关于延迟注册的争论。事实证明,用户思考的越少,转化率就越高!如果每个人似乎都有 Facebook 个人资料,为什么不添加一键用户注册呢?今天我将向您展示如何做到这一点。此外,我们添加了 oauth_provider 和 oauth_uid 字段来区分不同的第三方开放身份验证协议及其标识符。这很简单; 您只需为 oauthprovider 设置另一个值并避免重复 oauthuid 值。命名并同意条款和条件。注意最后的问号和域名; 两者都是 Facebook 所要求的。现在保存,下载客户端库并将srcdir中的facebook.php解压到根目录中创建的新目录中。本地脚本生成请求用户许可的 URL。Facebook 返回使用 GET 参数指定的 Canvas URL。如果您被重定向到 Facebook 并请求许可,那么我们就走在正确的轨道上。

最近有很多关于延迟注册的争论。 事实证明,用户思考的越少,转化率就越高! 真是个好主意! 如果每个人似乎都有 Facebook 个人资料,为什么不添加一键用户注册呢? 今天我将向您展示如何做到这一点。

步骤1.设置MySQL表

我们首先创建一个数据库表。

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `oauth_provider` varchar(10),
    `oauth_uid` text,
    `username` text,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

很简单:我们将建立一个用户信息表,其中包含 ID、用户名、名字和姓氏、用户图片的 URL 以及注册日期。 此外,我们添加了 oauth_provider 和 oauth_uid 字段来区分不同的第三方开放身份验证协议及其标识符。 例如,假设下周您认为邀请 Twitter 用户加入是个好主意。 这很简单; 您只需为 oauthprovider 设置另一个值并避免重复 oauthuid 值。

脸书应用程序

让我们从创建一个新应用程序开始。 命名并同意条款和条件。 接下来,在“Basic”选项卡中获取 API Key 和 Secret,如下所示。

在画布选项卡上,将 Canvas URL 和授权后重定向 URL 设置为本地主机以及脚本将处理的路径 - 例如 。 注意最后的问号和域名; 两者都是 Facebook 所要求的。 只需将您的主机文件设置为有效的域名即可。

在“连接”选项卡上,将“连接 URL”设置为与“基本域”相同的值(或您正在使用的任何值)。

现在保存,下载客户端库并将srcdir中的facebook.php解压到根目录中创建的新目录中。

步骤2.回调

认证过程分为三个步骤:

本地脚本生成请求用户许可的 URL。 Facebook 返回使用 GET 参数指定的 Canvas URL。 GET 参数对会话进行身份验证。

在注册和登录之前我们先快速测试一下。

# We require the library
require("facebook.php");
# Creating the facebook object
$facebook = new Facebook(array(
    'appId'  => 'YOUR_APP_ID',
    'secret' => 'YOUR_APP_SECRET',
    'cookie' => true
));
# Let's see if we have an active session
$session = $facebook->getSession();
if(!empty($session)) {
    # Active session, let's try getting the user id (getUser()) and user info (api->('/me'))
    try{
        $uid = $facebook->getUser();
        $user = $facebook->api('/me');
    } catch (Exception $e){}
    if(!empty($user)){
        # User info ok? Let's print it (Here we will be adding the login and registering routines)
        print_r($user);
    } else {
        # For testing purposes, if there was an error, let's kill the script
        die("There was an error.");
    }
} else {
    # There's no active session, let's generate one
    $login_url = $facebook->getLoginUrl();
    header("Location: ".$login_url);
}

现在,访问,让我们看看会发生什么。 如果您被重定向到 Facebook 并请求许可,那么我们就走在正确的轨道上。

然而,可能存在两个问题。 第一个:如果您被重定向到 Facebook 但显示错误,则配置中可能缺少值。 返回到您的应用程序设置并检查“连接”和“画布”选项卡,并确保这些字段正常,如上所述。

可能还有另一个问题,您会看到类似“Uncaught CurlException: 60: SSL 证书问题,请验证 CA 证书是否正常”的错误。 发生这种情况是因为 CURL 设置。 您必须打开 facebook.php,找到 makeRequest() 方法,并在函数中找到这一行:

$opts = self::$CURL_OPTS;

之后立即添加:

$opts[CURLOPT_SSL_VERIFYPEER] = false;

我讨厌黑客图书馆,但我还没有找到其他方法。 好的,让我们继续进行用户注册。 我还添加了一个 try/catch 语句,因为如果 URL 中的 GET 参数中有旧的会话密钥,脚本将终止并出现可怕的错误。

php新增用户要用uid吗_dz论坛怎么给用户uid_修改用户的uid

步骤3.注册和认证

接下来我们将使用MySQL。 请注意,我不会实现数据清理器,因为我希望代码尽可能短并完成工作。 请记住这一点:始终清理您的数据。

首先,让我们连接到数据库。

mysql_connect('localhost', 'YOUR_USERNAME', 'YOUR_PASSWORD');
mysql_select_db('YOUR_DATABASE');

现在,让我们处理 $session 条件,以防我们有会话。

# We have an active session; let's check if we've already registered the user
$query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'facebook' AND oauth_uid = ". $user['id']);
$result = mysql_fetch_array($query);
# If not, let's add it to the database
if(empty($result)){
    $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username) VALUES ('facebook', {$user['id']}, '{$user['name']}')");
    $query = msyql_query("SELECT * FROM users WHERE id = " . mysql_insert_id());
    $result = mysql_fetch_array($query);
}

请注意,我正在查询数据库,寻找 facebook 作为 oauth_provider; 如果您想接受其他 OAuth 提供商(如 twitter、Google 帐户、Open ID 等)和 oauth_uid,这通常是一个好主意,因为它是提供商为其用户帐户提供的标识符。

如果我们将 oauth_provider 字段保留为文本字段类型,可能会导致性能不佳。 因此,最好的选择是将其设置为 ENUM 类型。

我们现在有一个 $result var,其中包含从数据库查询的值。 接下来让我们添加一些会话。 在脚本的开头添加此行。

session_start();

在empty($result) 条件之后,附加以下内容:

if(!empty($user)){
    # ...
    if(empty($result)){
        # ...
    }
    # let's set session values
    $_SESSION['id'] = $result['id'];
    $_SESSION['oauth_uid'] = $result['oauth_uid'];
    $_SESSION['oauth_provider'] = $result['oauth_provider'];
    $_SESSION['username'] = $result['username'];
}

由于验证登录用户的身份没有什么意义,因此在 session_start() 行下面添加:

if(!empty($_SESSION)){
    header("Location: home.php");
}

在需要验证的脚本中,只需添加:

session_start();
if(!empty($_SESSION)){
    header("Location: login_facebook.php");
}

如果要显示用户名,请将其作为数组访问。

echo 'Welcome ' . $_SESSION['username'];
# or..
echo 'Welcome ' . !empty($_SESSION) ? $_SESSION['username'] : 'guest';

第四步:其他方法

Facebook 有大量的连接功能,但这里有四个我认为最有用的功能。

老方法

我可能遗漏了一些东西,但 FQL 似乎比 Graph API 更灵活、更简单。 幸运的是,Facebook 仍然允许开发者使用它,尽管新库对其进行了一些更改。

如果您需要用户 ID、名字、姓氏、用户图片的平方缩略图、可用的最大用户图片以及用户的性别,您可以使用 users.getInfo 方法。

    $uid = $facebook->getUser();
    $api_call = array(
        'method' => 'users.getinfo',
        'uids' => $uid,
        'fields' => 'uid, first_name, last_name, pic_square, pic_big, sex'
    );
    $users_getinfo = $facebook->api($api_call);

您可以检查 Users.getInfo 以获取可用字段的完整列表。

php新增用户要用uid吗_dz论坛怎么给用户uid_修改用户的uid

使用 FQL 可以获得相同的结果。

    $uid = $facebook->getUser();
    $fql_query  =   array(
        'method' => 'fql.query',
        'query' => 'SELECT uid, first_name, last_name, pic_square, pic_big, sex FROM user WHERE uid = ' . $uid
    );
    $fql_info = $facebook->api($fql_query);

以下是可使用 FQL 访问的表的列表,以及表用户可用的字段。

扩展权限

Facebook 为应用程序提供与用户数据的某些交互——只要它们得到授权。 在旧的 API 中,授予额外权限仅适用于 Javascript SDK(尽管我还不确定)。 借助新的 API,我们可以轻松地将用户重定向到 Facebook 中的授权对话框,并在访问被授予或拒绝后返回到我们的网站。

在以下示例中,我们将重定向用户以授权帖子状态更新、照片、视频和评论、用户的真实电子邮件地址、生日以及对照片和视频的访问权限。

$uid = $facebook->getUser();
# req_perms is a comma separated list of the permissions needed
$url = $facebook->getLoginUrl(array(
    'req_perms' => 'email,user_birthday,status_update,publish_stream,user_photos,user_videos'
));
header("Location: {$url} ");

这是权限的完整列表。 请注意,您可以指定用户接受时要定向到的 URL 以及用户拒绝时要重定向到的 URL。 这些数组元素的键分别是next和cancel_url。 这是一个简单的例子:

$url = $facebook->getLoginUrl(array(
    'req_perms' => 'email',
    'next' => 'http://localhost.com/thanks.php',
    'cancel_url' => 'http://localhost.com/sorry.php'
));

如果未指定,则默认为请求脚本的位置。

检查扩展权限

由于用户可以轻松撤销权限,因此应用程序应始终在使用给定权限之前检查是否已授予该权限,尤其是在发布某些内容时。 我们将不得不使用旧版 API,因为新 API 似乎尚未完全实现它。

    $uid = $facebook->getUser();
    # users.hasAppPermission
    $api_call = array(
        'method' => 'users.hasAppPermission',
        'uid' => $uid,
        'ext_perm' => 'publish_stream'
    );
    $users_hasapppermission = $facebook->api($api_call);
    print_r($users_hasapppermission);

ext_perm 将仅支持旧的可用权限列表。

张贴到墙上

验证用户有publish_stream权限后,让我们发布一些东西到墙上。

    # let's check if the user has granted access to posting in the wall
    $api_call = array(
        'method' => 'users.hasAppPermission',
        'uid' => $uid,
        'ext_perm' => 'publish_stream'
    );
    $can_post = $facebook->api($api_call);
    if($can_post){
        # post it!
        $facebook->api('/'.$uid.'/feed', 'post', array('message' => 'Saying hello from my Facebook app!'));
        echo 'Posted!';
    } else {
        die('Permissions required!');
    }

本质上,我们使用 POST 方法(第二个参数)和一个数组作为要发送的数据的第三个参数来对 //feed 进行 API 调用。 在这种情况下,第三个参数支持消息、链接、图片、标题、名称和描述。 代码如下所示:

$facebook->api('/'.$uid.'/feed', 'post', array(
    'message' => 'The message',
    'name' => 'The name',
    'description' => 'The description',
    'caption' => 'The caption',
    'picture' => 'http://i.imgur.com/yx3q2.png',
    'link' => 'https://code.tutsplus.com
));

这就是它的发布方式。

您应该了解的一些附加信息:

用户只需在他或她的墙上点击两次即可轻松撤销权限。 您应该广泛测试如果用户撤销对站点正常运行至关重要的一项或多项权限,或者即使应用程序被完全删除,可能会发生什么情况。 这个很重要。

5.结论

虽然 Facebook 的身份验证功能确实很有用,但由于现在有很多人使用 Facebook,因此不建议将其用作网站上唯一的身份验证方法。 那些没有 F​​acebook 帐户的人怎么办? 他们不允许访问您的应用程序吗? 感谢您的阅读!

坦克世界盒子插件安装在哪个文件夹中?

1、首先我们打开百度,在百度搜索框中输入坦克世界盒子官网,点击搜索进入坦克世界盒子主页。 2、进入盒子官网后,我们找到安装版本进行下载。 这里需要注意的是,盒子有两个版本,一个是安装版,一个是绿色版。 我们下载的是安装版。 3.下载《坦克世界》盒子后,我们打开盒子,找到左侧的增强按钮。 4.进入增强页面后,我们找到我们需要的插件。 5、比如我们需要的是船员图标插件。 找到这个插件后,点击安装。 6.点击下载并安装成功后,我们就可以运行游戏了。 游戏插件必须从坦克世界盒子启动才能生效。

《坦克世界》多人游戏盒的插件位于哪个文件夹中?

解压并放置到指定的安装文件夹中。 安装多人游戏盒。 它有一套完整的插件,比单独下载插件要好得多。

玩坦克世界盒子,下载的插件在哪里? 我想保存在存储卡上。

它不在桌面上,而是在盒子安装路径中。 无论您将盒子安装在哪里,该文件夹都在那里。

如何找到电脑上保存的《坦克世界》盒子的游戏视频?

你好,我来回答你的问题。 您的驱动器盘符:\World_of_Tanks\replays 与游戏路径相同。 或者您可以打开水箱框并选择视频。 您要打开的视频文件旁边有一个文件夹按钮(如图所示)。

多人坦克世界盒子设置游戏路径

找到坦克世界的安装目录,然后设置游戏启动项。 它看起来与这张图片类似。

除了游戏盒子的插件外,坦克世界还有什么?

坦克世界盒子,

功能与盒子类似

就我个人而言,我认为它不如盒子。

LZ可以用看看

坦克世界中有哪些版本的盒子?

唯一的选择是玩更多的盒子并拥有一个在这里很难使用的《坦克世界》脚本。

为什么我无法使用多人坦克世界盒子? 还有其他盒子我可以使用吗?

我们都是正常人,为什么不能用呢?希望采纳

除了WCG之外,坦克世界还有哪些国际赛事? ?

去年有乌拉尔钢铁大师赛,其他就是中服的超级杯和中超联赛。 欧洲服务器和俄罗斯服务器的玩家较多,因此线下游戏也相对较多。

多人坦克世界盒子安装在哪个文件夹中?

一般默认是c://program files/play more Tanks World box

为什么我无法下载《坦克世界》多人游戏盒中的插件? 当我点击下载按钮时,没有任何反应。

您可以从多玩专区的《坦克世界》插件网站下载。

我的《坦克世界》盒子似乎不起作用。 我打开坦克世界多人游戏框并单击开始游戏,然后出现了这个。 怎么解决呢? ? ?

坦克世界文件应该有问题。 尝试直接打开《坦克世界》。 如果问题仍然存在,请重新下载游戏。

为什么使用坦克世界多人盒子打开游戏会出现这种情况,但是直接打开却可以正常进入坦克世界游戏?

坦克世界盒子崩溃了。 现在我们只能等待官方消息了。 我们不知道什么时候会恢复。

《坦克世界》中存在多个游戏盒的问题。 当我在框中启动游戏时,会弹出如下图所示。

路径已被删除!路径文件丢失。 尝试将启动程序放入WOW文件夹中。

我一下载坦克世界多人游戏盒,坦克世界就自动退出了。 我应该怎么办?

自动退出是什么概念? 这是崩溃吗? 退休到桌面了吗? 如果是这种情况,重新安装游戏和盒子应该可以解决问题。

为什么多人游戏《坦克世界》框不断弹出?

改变~

坦克世界使用多人游戏盒

是的,我也感觉到了。 本来不想用盒子的,但是插件不给力,进度条老是卡住。 最后不得不用盒子。

正在寻找包含更多《坦克世界》游戏盒的网站?

断线实际上是客户端自行弹出造成的。 由于优化的成本太高,所以毛子并没有在优化上投入太多的精力。 他只是修改了少量参数……而且还有坑地网私自将其包含在游戏安装包中的情况。 添加了内置浏览器。 你可以打开游戏根目录(World_of_Tanks\res\awesomium)找到这个文件夹。 全部删除可以减少自动掉游戏的情况~~~~! 多玩玩盒子,一百度就能找到……希望你采纳~!

[坦克世界]8.9多人坦克世界盒子无法更新

相对的。 请问你解决了吗? 如果还没有解决的话。 请先进入您的《坦克世界》框,然后选择卸载所有插件。 然后删除这个坦克世界盒子的文件夹。 然后重新下载盒子并安装。

当我开始游戏时,《坦克世界》多人游戏盒子没有响应,这是怎么回事?

检查游戏路径是否设置。 如果设置了还是不行,请卸载盒子后重试。

当我无法进入《坦克世界》框时,会出现 0xc0150002。

是否安装了C++等游戏环境组件?

为什么使用多人坦克世界盒子后无法玩 0.915 版本?

刚刚在《坦克世界》专区的攻略热点栏目中得到了详细的解答。

无法显示多人《坦克世界》盒子网页。 请解决。

是盒子的问题。 只需卸载盒子并安装即可。

为什么我使用坦克世界多人游戏盒后无法开始游戏!!!??? 总是自动关闭

你好,我在8.5刚出来的时候也遇到过这种情况,我把盒子里的插件都卸载了,然后就可以用盒子启动坦克世界了。 我的电脑系统是win7 32位。

坦克世界盒子和绿色版有什么区别?

绿色版无需安装在游戏目录下。 如果安装过程中出现错误,可以直接删除并重新安装。 其他版本需要安装在游戏目录下。 一旦盒子出现问题,无法启动游戏,卸载盒子就更麻烦了。 我不明白为什么该框显示安装在该目录中的版本。

为什么我无法下载《坦克世界》盒子? 我应该如何下载它? 请具体说明。 谢谢。

这是更多玩坦克世界盒子的官方网站

多人魔盒绿色版是什么意思?

绿色版无需涉及注册表即可解压使用。 重装系统后仍然可以打开。 一般后缀为.rar或.zip。

直接删除绿色版就可以了

安装版会有安装进度条,并且会修改注册表。 重新安装系统后,您将需要重新安装该程序。 一般后缀是.exe。

安装版有专门的卸载程序

建议下载绿色版,解压到D盘什么的。 如果不再需要该文件夹,只需删除它即可。

下载《坦克世界》多人游戏盒后,《坦克世界》游戏屏幕上的注意符号是什么意思?

这意味着它还没有被点燃。

一旦点亮,! 会消失。

什么是多人坦克世界盒子?

一个辅助插件,可以让你看到每个人的战斗、输出、效率值、本地坦克弱点等。每次游戏客户端升级时,插件都会变得无法操作,必须升级后才能使用。

为什么我无法使用《坦克世界》盒子?

首先检查盒子版本是否是最新的。 如果是的话,那么检查一下盒子设置中的游戏目录是否正确(只要点击你安装游戏的文件夹中的“worldoftanks.exe”并确认即可,这一点非常重要!),如果不行,那么尝试以下操作:点击盒子里工具箱里的管理,点击清除所有涂层和插件,然后进入盒子的设置,勾选自动更新插件的盒子,然后保存设置,重启盒子,等待插件更新。 完成后进入游戏,看看车库左上角的菜单选项里有没有一个盒子的选项。 如果没有,清除所有画画插件,然后卸载盒子和游戏(这是把整个游戏安装的根目录全部删除)(卸载掉),重新安装游戏,然后进入安装包下一个盒子(不要用上一个),解压盒子,打开并重置正确的游戏安装目录(只需点击文件夹中你安装游戏的“worldoftanks.exe”并确认,这一点很重要!)然后进入游戏查看。 如果仍然不起作用,最好停止使用。 您的系统可能与该软件不兼容。 — 唷,我好累。 在手机上打字并不容易。 我希望你能采纳它。 谢谢~

为什么下载安装了插件后,《坦克世界》的多人坦克盒子却无法使用? 连盒子都打不开? 进展如何?

今天坦克客户端已经升级到9.6,多玩工作人员还没有把适合9.6版本的盒子放到网上。 现在的盒子坦克客户端不认识好吗?

今天更新的《坦克世界》盒子无法使用。 对每个人都一样吗?

3 人觉得有用。 坦克世界盒子下载后如何安装: 答:原贴神剑不允许。 如何安装坦克世界盒子: 答:坦克世界游戏正式版不支持任何插件。 使用插件可能会导致无法操作。 正常游戏或账号丢失。 ..

为什么现在的坦克世界多人游戏盒子无法使用,一进入就崩溃?而且玩游戏的时候

一般坦克世界更新到新版本时,盒子的插件也必须更新,所以插件无法使用。

坦克世界盒子玩多了,如何设置游戏路径

点击设置,点击设置路径或者自动搜索,自己设置就好,找到坦克世界安装目录,然后设置

如何设置多人坦克世界盒子的游戏路径

点击方框选项,有一个设置游戏路径,点击坦克世界主程序即可。 我点击桌面盒子快捷方式(它会自动启动,无需经过盒子),然后点击坦克世界安装目录中的游戏启动器,然后玩游戏。 因为你使用第一种方法启动,很容易在坦克世界的主程序中遇到错误日志,导致无法玩。 如果是因为插件安装提示找不到游戏目录,一般只需重新安装即可。 会自动寻找游戏文件(先安装游戏再安装盒子)

多人坦克世界盒子设置游戏路径无法保存

我在这里遇到了很多花屏、黑屏、跳屏等问题。 了解结果后,基本上都是64位的,有的在安装Win8平台时无法播放。 相反,在32位平台上基本不存在这样的问题。 基于此,我想知道这里是否出了问题? 但我不是专家,仅供参考!

如何使用坦克世界盒子的录像功能? 如何记录?

游戏设置第一页有录音功能。 您只需选择录制每场比赛的功能即可。

玩坦克世界的功能键是哪个键?

取决于你是否安装了使用Q键除草或E键除草的插件。希望采纳

坦克世界如何除草?

安装一个带有增强功能的“坦克世界盒子” - 其他 - 打开镜子并移除草

希望采纳~\(≧▽≦)/~

在 MAC 上安装《坦克世界》后如何除草

查看是否有mac版的玩多盒子。 如果是这样,您可以单击以移除草。

如何在《坦克世界》中移除树木和草以及如何设置

多玩盒子~增强版~低配置除草等等

坦克世界盒子无法除草怎么办?

坦克世界论坛有玩家分享的各种插件,你可以搜索一下。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]