详细前后端分离实现facebook第三方登录的全过程(国内一般都是用Android和ios,并且资料稀少)

2023-11-19

需求

实习,手上有个海外业务的项目,需要在网页端实现facebook的第三方登录。本身国内有防火墙,这个需求就极其稀少,而且一般都是在Android或者ios上实现的,造成了留存的资料少之又少。记录下这篇博客,也许可以帮助后来者少走点弯路。

官方文档与校验工具

facebook官网
facebook登录官方文档
网页版facebook登录官方文档
facebook 官方access_token调试工具
以上这些文档和工具,就是我在开发过程中,所找到的一些较为有用的工具。可以提取不少信息。官方文档其实都有说,就是没那么明白。下面我将展示一下详细的步骤

详细步骤

1、注册一个facebook的账号

你得有一个facebook的账号,然后才能成为facebook的开发者。

2、登录https://developers.facebook.com/

利用你的facebook账号登录进去,你才是一个开发者。得有这个权限,才能开发第三方登录。

3、点击我的应用

在这里插入图片描述

4、创建一个属于自己的应用

在这里插入图片描述

5、选择类型和详情

在这里插入图片描述
在这里插入图片描述

6、回到我的应用界面上

在这里插入图片描述
就可以看到刚刚创建的应用了。

7、点击应用名字,查看详情

在这里插入图片描述

要记下来你的client_id 和 client_secret!

8、记录facebook登录的设置

在这里插入图片描述
比如你的网域是:https://.aliyuncs.com/
有效Oauth跳转的uri就必须是:https://
.aliyuncs.com/path

9、应用权限审核

在这里插入图片描述
这个的作用,就是告诉facebook你要使用到用户的哪些数据,比如,email,和 public_profile。这两个是可以直接通过的,就是由一般访问权提升为高级访问权。已经申请的话会看到前面访问登记是绿色的,就是高级访问权了了。

其他的权限,申请了就要facebook审批,审批的周期一般是七天。

在第六步,有个数据使用情况检查,就是你要在指定的某个时间段之前向facebook做你要使用这些数据的说明,还有承诺合理使用你已经获得通过的数据权限,合理使用用户的数据。

10、一些基本的准备

以上,就是你要开发第三方路所要准备的东西,开发的都必须要走https,http不行的。如果没有这种https域名的,建议可以学习一下使用 ngrok。这个是一个内网穿透的工具,可以临时使得你的内网和变成可以访问的外网。

11、构建前端的登录界面

最简陋的代码我贴在下面了,大家可以自取。
=注意点:
1、下面的地址,你要换成自己的应用的id
2、这个界面运行起来后,必须在公网能够访问得到,且必须是https开头的

<html>
    <head>
        <script async defer crossorigin="anonymous" src="https://connect.facebook.net/zh_CN/sdk.js#xfbml=1&version=v12.0&appId=填自己的应用id&autoLogAppEvents=1"></script>
        <script>
            function login() {
                FB.login(function(response){
                    console.log(response); // 在控制台打印返回的access_token 
                },{scope: 'public_profile,email,user_friends'});
            }
        </script>
    </head>
    <body>
        <h1>Facebook login</h1>
        <!-- 自定义登录按钮 -->
        <button id="loginBtn" onclick="login();" >login</button>
    </body>
</html>

我部署完成之后是这样子的!
在这里插入图片描述
界面如下:
在这里插入图片描述

12、点击登录按钮

点击登录按钮,会显示如下的界面。
在这里插入图片描述

13、点击按钮,继续

这样子就用户完成你的网站的授权了,你可以访问facebook的一些关于当前用户的数据。
我们打开控制台。
在这里插入图片描述
最主要的,就是拿到access_token。这个是个临时的access_token,大概有效时间只有1个小时。想要校验当前的access_token的存活时间,你所能访问用户的权限,就可以用到上面的权限校验工具。
访问口令调试器

复制你的access_token到调试工具,就可以看到有效时间,你所能访问的用户的信息的权限等信息。

14、访问口令调试器

将你的access_token放到这里,就可以看到你的access_token的相关信息。
在这里插入图片描述

15、延长访问口令期限(一定要在后端完成)

这个token只有一个小时的有效时间,我们可能需要在很长一段时间内不定时去访问用户的数据。所以,我们必须延长访问口令期限。

下面有个按钮,直接就可以延长口令的访问期限。因为我看到以前别人的博客给的链接是失效了,害我在这里白白浪费大半天,如果以后大家遇到我下面给的链接失效的情况,大家可以在这里直接调试,并利用浏览器自带的network查看请求的去向后和必要的消息。
https://graph.facebook.com/v12.0/oauth/access_token?__a=1
在这里插入图片描述
这里我自己就是看了请求才找到的接口,以前的有一些错误或者失效了。还是自己可靠!
在这里插入图片描述
兑换长期access_token一定要在后端完成,因为涉及到client_secret,这里我只是为了方便快捷,就没有使用java去获取!
兑换长期access_token一定要在后端完成,因为涉及到client_secret,这里我只是为了方便快捷,就没有使用java去获取!
兑换长期access_token一定要在后端完成,因为涉及到client_secret,这里我只是为了方便快捷,就没有使用java去获取!
兑换长期access_token一定要在后端完成,因为涉及到client_secret,这里我只是为了方便快捷,就没有使用java去获取!
一般是拿到了短时效token,传给后端,后端去获取长时效token(这个过程中需要使用到client_secret,必须保证client_secret的安全),并且,查询数据的时候,也是后端拿着长期的token去查,所以,一定要让后端去兑换,并且返回的长期token只能服务器知道,给前端的话可能会被人拿到,那就去做坏事你也没办法了,但是服务器就不一样。

19、拿着长期的token去获取数据

通过下面这个链接,可以获取到用户的name和id

https://graph.facebook.com/me?access_token=填你自己的access_token

在这里插入图片描述
拿到了用户的id,可以去获取用户的其他数据。

https://graph.facebook.com/上面获取到的用户id?fields=id,name,email&access_token=填你的token

在这里插入图片描述
这就拿到了用户在facebook上的数据了。
解释一下其他东西,那个fields=id, 后面跟着的东西,就是你要获取的用户的数据,你想要获取用户的数据,就必须在用户登录的时候进行申请,不然会报错的。

20、以上就是基本步骤

但是有一些接口啥的,可能过一段时间会改变,推荐大家去看官方文档并结合我这个流程进行使用。

一些情况说明

登陆页面一闪而过

比如,我登陆之后,再一次点击登陆按钮,还是会弹出那个界面但是一闪而过。
这个是facebook已经登陆了,他再去登陆一次,会覆盖你原来的短时效token

进入到用户对应的facebook官网
在这里插入图片描述
某个用户在你的第三方网站登陆之后,facebook会进行一个通知它,这里解除掉登陆信息就可以再进入到登陆界面了。

实际开发怎么解决

facebook的官网文档里面有提到一个特定的函数,可以检验当前用户是否在授权你的网站登录facebook并获取他在facebook上的数据。可以拿着函数的结果去校验,一旦登陆,就不再显示当前按钮即可。
官方文档链接

FB.getLoginStatus(function(response) {
    statusChangeCallback(response);
});

在这里插入图片描述

官方文档错误

2021年12月29日15:49:00勘误,官网使用短时效去兑换长时效的接口有错误。
兑换长期口令的文档
在这里插入图片描述
实际上,用的请求方式必须为post。

总结

官方文档真的得好好仔细研究。如果一个问题,你不知道怎么解决,那么有一个办法,看官方文档;如果还不行,那就是你的官方文档没看仔细,没看明白,没看透!

虽然两天下来,很痛苦,不过拿到数据的那一刻,我是非常开心的,证明了自己不是只会做一些crud的简单工作,虽然这个也简单!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详细前后端分离实现facebook第三方登录的全过程(国内一般都是用Android和ios,并且资料稀少) 的相关文章

  • 大数据面试题及答案

    Hadoop 相关试题 Hive 相关试题 1 hive表关联查询 如何解决数据倾斜的问题 倾斜原因 map输出数据按key Hash的分配到reduce中 由于key分布不均匀 业务数据本身的特点 建表时考虑不周 等原因造成的reduce
  • 如何快速检测代理IP质量?方法与工具全干货

    一直以来 IP代理都是出海跨境业务的刚需 质量好的IP代理 除了在跨境业务产生巨大作用 在SEO监控 爬虫抓取 市场研究等领域也发挥着很大的作用 但是 对于IP代理的质量检测是我们选择高标准IP代理的一句 我们一般都会建议在使用IP代理前
  • 5G技术优势

    1G实现了移动通话 2G实现了短信 数字语音和手机上网 3G带来了基于图片的移动互联网 而4G则推动了移动视频的发展 5G网络则视为未来物联网 车联网等万物互联的基础 同时 5G普及将使得包括虚拟现实和增强现实这些技术成为主流 4G网络是专
  • 修改网页logo

    在用浏览器打开网站的时候 浏览器标签页上面有网站的图标 类似于logo小图标 如下图 步骤1 打开你的tomcat的安装目录 我的目录实在G盘 G apache tomcat 7 0 53 windows x64 apache tomcat
  • java进制转换方法

    一 十进制向二 八 十六进制的转换 方法一 Integer toBinaryString i 表示十进制转为二进制 Integer toOctalString i 表示十进制转为八进制 Integer toHexString i 表示十进制
  • 周庄不买门票攻略_周庄古镇旅游攻略

    周庄古镇旅游攻略 周庄古镇是世界文化遗产预选地 首批国家5A级旅游景区 位于苏州城东南 位于昆山 吴江 上海三地交界处 周庄古镇四面环水 因河成镇 依水成街 以街为市 井字型河道上完好保存着14座建于元 明 清各代的古石桥 800多户原住民
  • org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java

    项目场景 项目中执行clean 再执行install时报错 错误如下 org springframework boot maven RepackageMojo has been compiled by a more recent versi
  • Python库之自然语言处理和文本挖掘

    来源地址 http www python88 com topic 37015 https mp weixin qq com s sPAomFg 5JZigFUG CtnaQ 自然语言处理和文本挖掘库主要用于以自然语言文本为对象的数据处理和建
  • linux基本命令练习

    1 列出 etc目录下的所有文件名称 2 创建文件file1 和file2 并复制到 home目录下 3 显示以ma开头的所有命令 ma 双击两次 TAB键 4显示所有文件名中有 bash的文件 用tab命令补全 5 显示当前所在的目录路径
  • android图像识别(百度普通物体识别)

    android图像识别 采用百度sdk 识别准确率基本上能用 主要缺陷是百度sdk免费额度有限 demo链接如下 仅供参考https download csdn net download android xc 12274161
  • Python进阶之CrawlSpider的应用及Scrapy配置项的引用

    1 CrawlSpider的应用 CrawlSpider可以根据规则自动分析链接的数据并按照正则的要求取出需要的数据 scrajpy startproject yg cd yg 注意 t crawl参数 scrapy genspider t
  • 解决SqlServer批量插入最多2100条数据的方法

    SqlServer批量插入数据时最多不能超过2100条 记录一下解决办法 Java代码 public void batchInsert List
  • 基于vue实现移动端点击上方导航,内容滑动切换,滑动内容导航自动切换。

    这是在日常开发过程中常见的选项卡 带滑动切换效果 小白一枚 不足之处还望体谅 包涵 这也是第一次尝试写博客 以后会继续分享一些工作中的问题与收获 实现效果 点击上方导航 当前导航添加样式 下方内容滑动切换 滑动下方内容上面导航切换 第一步
  • 论文笔记:Region Representation Learning via Mobility Flow

    2017 CIKM 1 摘要和介绍 使用出租车出行数据学习区域向量表征 同时考虑时间动态和多跳位置转换 gt 通过flow graph和spatial graph学习表征 出租车交通流可以作为区域相似度的一种 A区域和B区域之间流量大 gt
  • JS 变量提升和函数提升

    变量提升 这里介绍一个变量提升提升的经典案例 for var i 0 i lt 10 i setTimeout gt console log i 1000 这里打印是10个10 因为在执行第一个setTimeout时 Js不会等待1秒后再去
  • 怎么解决“无法打开包括文件:“graphics.h”: No such file or directory”的问题

    在接手同伴的中国象棋项目时 导入项目后 发现VS一直提示 无法打开包括文件 graphics h No such file or directory 在查阅资料后发现是缺少easyx文件 接下来 就介绍一下手动配置一下easyx文件 eas
  • 特殊类型动归--区间动归与环形动归

    区间动归 某类有序事件中前若干个事件的子答案 不能再支撑状态转移 我们需要去寻找 从某个元素起到另一个元素结束所包含所有的 连续 元素的子答案 作为状态 可以想象 在这个描述下 每个状态会对应于原题序列上的一个区间 区间具有良好的性质 短的
  • 深度学习(1):BP神经网络实现银行客户流失预测

    目的 针对银行客户行为和统计数据实现客户流失预测任务 一 数据准备 1 数据集 select data csv 作为训练样本 数据预处理方式 归一化 数值化 CreditScore 信用分数 EB 存贷款情况 EstimatedSalary
  • centos 建立回收站

    linux下的回收站在每一个当前用户目录 local share Trash中 也可以给linux添加一个回收站 mkdir tmp trash tmp 建立一个回收站目录 vi bin trash 编辑一个文件 mv tmp trash

随机推荐

  • python之浅拷贝、深拷贝

    什么是浅拷贝 深拷贝 理论来自python基础教程 在 Python 中 对象赋值实际上是对象的引用 当创建一个对象 然后把它赋给另一个变量的时候 Python 并没有拷贝这个对象 而只是拷贝了这个对象的引用 我们称之为浅拷贝 在 Pyth
  • 腾讯云 Finops Crane 开发者集训营 - 云原生如何助力企业搞定成本优化

    引言 随着docker的技术普及 越来越多的企业加入了云计算发展进程 云原生产业发展迅猛 云原生建设投入比例明显 面对大规模的集群投入 部署 维护等问题也逐渐产生 越来越多的企业对云原生不断提出更高要求 同时云原生技术简化运维的效能提 升开
  • .Net WebAPI 高速下载文件接口实现

    接触WebAPI一年多了 感觉是个承上启下 开创未来的技术 老一辈程序员写接口就像写方法一样 不需要了解太多网页的知识 却可以在浏览器中访问这些接口 由于是基于HTTP协议 因此不管是PC 手机还是嵌入式均可顺利访问 对于当下软件多终端的设
  • Spark 【分区与并行度】

    RDD 并行度和分区 SparkConf setMaster local 我们在创建 SparkContext 对象时通常会指定 SparkConf 参数 它包含了我们运行时的配置信息 如果我们的 setMaster 中的参数是 local
  • 服务器维护中轩辕,轩辕服务器为什么老是-轩辕服务器为什么 – 手机爱问

    网三轩辕为什么上不去了啊 网三轩 朋友 我先问下 有以下的情况吗 第一 你的号上去后 选线的时候是不是请重从连接 要是的话这是卡号了 第二 你上号的时候 写账号和密码 就提事说 从请从新登陆 这不是卡号 这也是卡线了 这是你卡线的时候总来回
  • xray扫描器的使用 (长亭科技公司创造)

    简介 xray是一款可以使用HTTP HTTPS代理进行被动扫描的安全工具 支持功能如下 独立的 URL 扫描 基于 HTTP 的被动代理扫描 同时支持HTTPS SQL注入检测模块 命令注入检测模块 任意重定向检测模块 路径遍历模块 Xr
  • c# Newtonsoft.Json 常用方法总结

    1 实体类的 Json 序列化和反序列化 我们以如下的 Person 类举例 其中包含了常用的数据类型 public class Person public int ID get set public string Name get set
  • Kubernetes之kubectl命令详解及常用示例

    文章目录 一 kubectl语法 二 子命令详解 1 command 2 type 3 flags 4 kubectl的输出格式 三 kubectl常用命令 1 查看类命令 2 操作类命令 3 其他操作 一 kubectl语法 kubect
  • 容器与云的碰撞——一次对MinIO的测试

    事先声明 本次测试过程完全处于本地或授权环境 仅供学习与参考 不存在未授权测试过程 本文提到的漏洞 MinIO未授权SSRF漏洞 CVE 2021 21287 已经修复 也请读者勿使用该漏洞进行未授权测试 否则作者不承担任何责任 随着工作和
  • OAuth2.0-授权码模式

    解决问题 OAuth2 0授权码模式主要解决了信任问题 一个第三方网站需要访问我们Github上的数据 例如用户头像 那Github为什么要信任该网站 该对网站信任到什么程度 如果彻底信任该网站 那么将Github的用户名和密码直接交给该网
  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • 【mysql批量插入或更新方法实现】

    自定义批量插入或更新 1 创建接口 替代baseMapper public interface RootMapper
  • CentOS搭建vsftp

    VSFTPD Very Secure FTP Daemon 是一个在 CentOS 中常用的 FTP 服务器软件 它是一个轻量级 安全且高性能的 FTP 服务器 基于 RFC 959 协议 并实现了大多数 FTP 协议的功能 VSFTPD
  • ObjectARX学习

    VS2010 VS2012 VS2013 VS2015 VS2017各版本产品激活秘钥 ObjectARX简介 ObjectARX解压包内各文件代表什么 VS ObjectARX SDK AutoCAD对应关系 1 VS2010 VS201
  • Flutter websocket 实现消息推送

    没什么可说的 直接上代码吧 Flutter 中的消息管理工具 class MessageUtils static WebSocket webSocket static num id 0 static void connect Future
  • NGINX实现TCP加密代理

    NGINX实现TCP加密代理 NGINX实现TCP代理 源码安装NGINX 修改配置文件 重启NGINX 测试 实现转发MySql Redis 矿池ssl 以及各种TCP转发 NGINX实现TCP代理 源码安装NGINX NGINX官网源码
  • 数据挖掘(全书的知识点都包括了)

    数据挖掘 第一章 1 什么是数据挖掘 数据挖掘是从数据中 发现其有用的信息 从而帮助我们做出决策 广义角度 数据挖掘是从大量的 不完全的 有噪声的 模糊的 随机的实际应用数据中 提取隐含在其中的 人们事先不知道的 但又是潜在有用的信息和知识
  • Android图片加载内存优化

    Android图片加载内存优化 利用BitmapFactory Options实现图片内存优化 通过设置options inPreferredConfig控制内存占用 通过设置采样率options inSampleSize来减少图片内存占用
  • 使用R语言构建泊松回归模型

    使用R语言构建泊松回归模型 泊松回归是一种广泛应用于计数数据分析的回归模型 它是基于泊松分布的概率模型 用于描述事件在一定时间或空间范围内发生的次数 在本文中 我们将学习如何使用R语言构建泊松回归模型 并提供相应的源代码示例 1 数据准备
  • 详细前后端分离实现facebook第三方登录的全过程(国内一般都是用Android和ios,并且资料稀少)

    实现facebook第三方登录全过程 需求 官方文档与校验工具 详细步骤 1 注册一个facebook的账号 2 登录https developers facebook com 3 点击我的应用 4 创建一个属于自己的应用 5 选择类型和详