什么是联合登录

因为公司产品的发展,会与第三方的一些商户进行对接,商户APP提供入口,进入我们的H5页,从而提供服务。

而商户希望用户在其APP进行账户登录后,进入H5页不再进行登录,所以我们的H5需要拿到用户在商户的账户的标识id(暂时称之PartnerID),然后与我们的产品的账户标识id(暂时称之H5ID)进行一个关联,这样在用户登录APP后,我们能够通过PartnerID去查询关联的H5ID以获取账户信息,这样就可以保持登录的同步了。


解决方案

上述描述中的一个关键点是:如何拿到PartnerID

获取PartnerID大体有以三种方案:

方案1:授权回调式,商户提供授权页面,H5页面需要登录时,先进入商户提供的授权页,由用户同意授权,进而获取PartnerID
方案2:APP接口式,商户APP存在nativeAPI,H5页面调用nativeAPI以获取PartnerID
方案3:凭证解密式,商户APP在H5的url的query上添加加密字符串,H5页面取之解密后获取PartnerID

基本说遇到的联合登录大多以上三种之一,例如微信授权登录,可以视微信为商户,微信的unionid即PartnerID,微信使用的就是方案1。

另外实方案1是方案2的一个完善,商户提供的授权页上其实使用了方案2来获取PartnerID,这样可以保证自己APP的nativeAPI是由自己的H5页所调用,进而增加安全性。

所以说,就安全性的排序为:1 > 2 > 3

越安全开发即越复杂,所以,开发的复杂度也就是以上的排序。


联合登录的详细步骤

代码就不贴了,详细步骤如下:

  • 1:准备进入一个H5页面,它需要登录方可访问
  • 2:在进入之前先取PartnerID,商户APP未登录则进行APP登录,再返回PartnerID
  • 3:得到PartnerID,去查询相应的H5ID,有则存储账户登录信息进入第5步,无关联则进入下一步
  • 4:H5登录页进行登录,登录后得到H5ID,将H5ID与PartnerID进行绑定,并且存储账户登录信息
  • 5:此时已登录,进入页面中

独立代码

方案有三种,但有些代码是必须得写的,总结如下:

  • 配置文件:因为商户不同,则接入类型和配置参数不同,假设有一个 shanghu.js ,如下代码:
module.exports = {id: 'a', // 商户名称type: 1, // 接入方案类型
}
  • 方案1:“调用进入商户授权页”和“调用商户API获取PartnerID”的两个函数
  • 方案2:“调用nativeAPI获取PartnerID”的函数
  • 方案3:“解密字符串得到PartnerID”的函数

这些根据商户不同代码也是不同的,做不到统一解决方案,so,老老实实写吧。

不过有些代码可以做成通用的,开发完成则后续接入可以不用再管了。

通用代码

方案1:授权回调式

说是最复杂的方案,其实通用代码就两个路由:

前往授权 /toAuth:前往需要登录的页面时(假设地址为A),则先前往此路由,此路由接收一个回调地址(A)并存储在 session 中,然后此路由进入商户授权页(此时调用独立代码中进入商户授权页的函数

授权回调 /authBack:必须提供给商户的回调路由,当商户授权页面中用户授权后,会返回此路由,用户的token亦会在query上传递回来,通过token去换取PartnerID,即执行联合登录的3、4步后(此时调用独立代码中调用商户API获取PartnerID的函数),则取出session中的回调地址(例子中的A)并进入

方案2:APP接口式

这个方案的通用代码其实就是一个前端函数:

根据商户调用其特定的独立函数:前端能得到PartnerID,所以在需要登录之前,先调用该商户的独立代码中的调用nativeAPI获取PartnerID的函数,得到PartnerID,再执行联合登录的3、4步,最后完成登录操作。

方案3:凭证解密式

这个方案最简单,只是在入口的路由加一个操作:

存储加密凭证字符串:在入口路由上,将加密凭证存入session中,在需要登录前,则调用该商户的独立代码中的解密字符串得到PartnerID的函数,得到PartnerID,再执行联合登录的3、4步,最后完成登录操作。

查询接口

联合登录的第3步中,会存在两个api,这些由我们自己开发,分别是:

  • 查询绑定账户:通过PartnerID查询关联的H5ID,若存在,则返回账户的登录信息,若不存在,则返回无绑定关系,前端根据api结果判断是否进入H5的登录页
  • 进行账户绑定:将PartnerID和H5ID进行绑定,返回账户的登录信息

其他比较特殊的登录

静默登录

在上面的过程中,中间会有一层绑定的操作,此时需要内部H5页进行一次登录,而这样会出现两次登录的情况:APP登录后,首次进入H5,H5中登录并绑定。

所以,有些商户有这样的需求:APP已登录,则在H5内部无需登录,即首次进入H5也无需在H5进行登录绑定就可以有登录状态。

这种样的解决方案其实很简单,在查询的两个接口中,存在查询绑定账户的接口,这个接口的功能是:

  • 通过PartnerID查询关联的H5ID,若存在,则返回账户的登录信息,若不存在,则返回无绑定关系,进入H5的登录页

如果需要满足上述需求,实际是这个接口永远返回登录信息,包括首次登录,如此简单即可。

因为在调用接口时,会传递商户名称和PartnerID,接口开发人员可以根据商户名进行操作。

例如:平台cmb需要静默登录,则后端开发人员在查询绑定账户接口接收参数 partnerName,若 partnerName === 'cmb',则静默注册一个账号并登录,返回登录信息,其余的则正常流程。

而对于多个商户都有此类需求,可以维护一个 array ,符合array内的条目,进行进行静默注册并登录,不符合则走正常的步骤。

快应用的嵌入

快应用页可以获取用户在开放平台unionid,在进行嵌入开发时,有时候需要拿到unionid和H5的账户进行绑定。

首先,快应用提供了API以获取用户唯一身份标识,其次,快应用本身应该视为一个轻量APP的开发,而快应用也提供了一些方法,我们可以封存一些方法和接口,由H5以nativeAPI的方式进行调用和开发,故而快应用的联合登录应该是方案2:APP接口式。

封装

web组件可以使用:

  • postMessage:向内部H5推送一个消息
  • onmessage:监听内部H5的消息

内部H5可以使用:

  • system.postMessage:向外部web组件推送一个消息
  • system.onmessage:监听外部web组件传递的消息

故可以在web组件监听 onmessage ,得到网页 system.postMessage 发送的登录请求时,在快应用层去调用登录API,得到PartnerID后,再由web组件的 postMessage 将PartnerID传递给内部H5页面,而H5则得到PartnerID,走正常的联合登录流程。

H5嵌入APP的联合登录的解决方案相关推荐

  1. vue-cli4+vue2兼容安卓7(h5嵌入app),一步步排查发现问题并且解决(vue白屏)

    1.最近在做一个项目使用vue重构(h5嵌入安卓app),我们的系统最低版本安卓7,然后就遇到问题了,刚开始打包前两天还好好的,就过了2天就突然一发布就不行了. ①首先我想到公司搬家导致的内网访问不了 ...

  2. h5 video 手机 显示第一帧_解决h5嵌入app后video标签poster不能显示视频第一帧(表现为空白)...

    这里我们先来描述一下问题,页面中使用了video标签,按照video标签的官方介绍下图介绍: 没有设置poster的情况下在浏览器中我们可以看到视频的第一帧,页面效果如下图左图所示:但是嵌入App后, ...

  3. android 监听 h5 window,H5嵌入APP后,通过window.WebViewJavascriptBridge原生APP与H5之间交互...

    下面从H5的角度记录交互思路: 1:安卓环境和ios环境稍微有点不同,需要根据navigator.userAgent判断一下当前环境 2:仍然是APP环境不同,安卓需要进行兼容性判断,如果不存在win ...

  4. h5封装去底部_Appium—Native+H5混合APP的自动化

    前言 小编所在项目的客户端是比较奇怪的一个APP,大部分页面Android和iOS的客户端只提供了webview的功能,都是由H5处理业务逻辑和用户交互.H5承担了和服务端.和客户端的交互. 虽然在开 ...

  5. HBuilder 打包 H5 APP 进行认证登录

    [H5 Mui] App 统一身份认证登录过程的记录 在 h5 app 开发的过程中,用到到统一认证登录的功能(统一身份认证登接口),来进行登录验证. 在开发 h5 app 的时候,一般会提供 app ...

  6. H5 唤起 APP的解决方案

    H5 唤起 APP的解决方案 参考文章: (1)H5 唤起 APP的解决方案 (2)https://www.cnblogs.com/yzhihao/p/8989195.html 备忘一下.

  7. HBuilder开发旅游类APP(二) ----- mui结合H5+,快速实现首页、登录、注册等功能

    HBuilder开发旅游类APP(二) ----- mui结合H5+,快速实现首页.登录.注册等功能 作者:班尼科 本博文是本人原创,喜欢请给我点赞,转载请注明出处哦. 标签: 旅游 H5+ MUI ...

  8. 用dcloud 的h5+实现APP简单登录页面

    # 简单介绍 最近接到公司一个移动APP项目开发任务,公司决定采用跨端技术来实现一套代码同时兼容安卓和苹果端手机,于是我评估了一下最后决定采用dcloud平台提供mui和htlm5+技术来实现,其实现 ...

  9. 产品必备:注册登录完整解决方案 | 含原型下载

    PMCAFF(www.pmcaff.com):互联网产品社区,是百度,腾讯,阿里等产品经理的学习交流平台.定期出品深度产品观察,互联产品研究首选. 外包大师(www.waibaodashi.com): ...

最新文章

  1. nginx proxy_next_upstream导致的一个重复提交错误
  2. java.security.InvalidKeyException:illegal Key Size
  3. 蒙特利尔大学发布2021年最新自监督小样本检测综述
  4. 双向多点路由重分布--如何防止路由环路以及次优路径
  5. C# WinFormDataGrideView 用内存数据源时的注意事项
  6. 自用Excel VBA技巧整理
  7. javascript --- 异步工作流的动态排队技术
  8. 函数⑥作用域与命名空间
  9. shell编程之进阶篇五函数
  10. 在线HTML网页小窗口复制不了,教你一招:解决某些网页不能复制的文字的N种方法!...
  11. (二)Qt中QTableView中加入Check列实现
  12. CCF201312--模拟练习试题参考答案(C++)
  13. VB.NET水晶报表控件经验总结
  14. 【python基础语法】range() 序列类型range
  15. String 字符串问题一
  16. 免费直播编码软件应用技巧
  17. lisp 标注螺纹孔_cad中螺纹孔怎么标注
  18. 【DB笔试面试642】在Oracle中,什么是基数反馈(Cardinality Feedback)?
  19. OSX:隐藏文件或文件夹
  20. Exception raised: Traceback (most recent call last):

热门文章

  1. 2020曼彻斯特大学计算机2020,2020年曼彻斯特大学申请要求完整版
  2. 获取嵌入式Linux设备下的触摸设备节点
  3. shell脚本修改mysql密码
  4. mac修改mysql密码(亲测)
  5. CMS功能(简介和配置)
  6. Flume之生产正确的使用方式一(Singel Agent)
  7. word标题前面存在竖线
  8. 快速原型模型是什么?
  9. oracle中文名转拼音,oracle 汉字转拼音
  10. Spring Messaging 远程代码执行漏洞分析(CVE-2018-1270)