实现此功能的场景是在当下用户对手机APP体验要求高,并且相对安全前提的推动下诞生;当你下载了一个QQ,微信第一次进行了账号和密码的登录,你从此以后打开应用免去了你每日打开应用都要输入账号跟密码的痛苦过程,在产品体验方面来讲,这种体验更为让用户容易接受。那么,这种自动登录如何实现;

之前在APP里面接入达达配送的时候,看到他们提供的API接口里面大致有了这个一个认证的过程,自己琢磨了一下,依稀的弄出了一个类似这样的自动登录的流程;


一、获取token登录令牌接口(可以理解为登录接口)

这一步是需要用户使用账号和密码进行登录去获取,用户如果登录成功,那么后台返回一个token及token的失效时间,及未来如果token失效之后刷新token的令牌!

返回参数示例及说明:

{//状态位,ok表示成功"status":"0",//申请的有效token值"token":"4a28d8516d42f4821e6d5782d1a79a7a",//token的有效时间,单位为秒,这里设定7天有效期(604800秒)"expires_in":"604800",//token过期情况下,用来刷新access_token值,设置30天的有效期"refresh_token":"8ab486662d50e6d51a5a5dd6a25c9a4b"}

说明:

用户第一次进入APP,APP判断手机上是否存在token值,不存在,表明用户第一次进入APP,跳转登录界面让用户进行登录
用户使用账号和密码登录成功,后台进行认证,认证成功,返回token、expires_in、refresh_token,APP需把这几个值安全保存在手机本地,便于下一次用户进入app的一些流程判断
继续上一步中间插入一个小细节,后台在登录成功之后,需要把token、expires_in、refresh_token(其他附加值:如设备唯一编号、或其他密令…)保存在数据库和用户关联的表里,便于未来用户自动登录认证使用
上面步骤进行完毕,APP即跳入到应用首页,用户可以完全使用APP


二、刷新token登录令牌接口

此接口是对第一个接口的一些弥补,token的过期时间原理上可以说是越短越安全,那么存在的问题就是token有一个过期时间,那么过期之后是不可能让用户重新输入用户名和密码来重新获取token的,那样完全违背了提升体验的初衷,相当于此功能是一个累赘了;

在token过期的情况,我们可以使用保存在手机本地的refresh_token去后台刷新一下token,重新获取一组令牌信息,覆盖掉以前保存在手机上的令牌信息,这也算是提升了一点安全性,为避免以前的令牌信息如果真落入别人之手;

此接口的请求参数可以参考以下参数:

 1
 2 {
 3
 4 //用户账号,大多数APP用的是手机号登录,这里也可以是其他值,能表名是将要自动登录的用户即可
 5
 6 "username":"13000000007",
 7
 8 //手机设备的唯一值
 9
10 "imei":"928347024892343",
11
12 //刷新token的令牌
13
14 "refresh_token":"8ab486662d50e6d51a5a5dd6a25c9a4b"
15
16 }

返回参数示例及说明:

 1
 2 {
 3
 4 //状态位,ok表示成功
 5
 6 "status":"0",
 7
 8 //申请的有效token值
 9
10 "token":"4a28d8516d42f4821e6d5782d1a79a7a",
11
12 //token的有效时间,单位为秒,这里设定7天有效期(604800秒)
13
14 "expires_in":"604800",
15
16 //token过期情况下,用来刷新access_token值,设置30天的有效期
17
18 "refresh_token":"8ab486662d50e6d51a5a5dd6a25c9a4b"
19
20 }

说明:
看着是不是和获取token的接口返回值一样,对,你没有看错,这确实就是和获取token的接口是一样的,把返回的这些令牌信息覆盖掉之前保存在手机上的老的令牌信息就可以了;特别是这里为了节省请求接口的次数,刷新token成功之后就可以让用户跳转到首页进行使用app了,不用再次请求其他认证token的接口了

从请求到响应之后的一系列处理流程为:

场景是用户过了1天之后再次打开了APP,APP首先获取本地是否存在token,如存在,会去请求第三步的token认证接口,需要用到刷新token这个接口的前提必须是token认证接口的返回值表示token过期了,那么此时本接口(刷新登录令牌的接口就有了作用),这里可以使用账号、设备编号、刷新token的令牌或者你还可以自己定一些加密方案的参数一同传入后台进行认证,当后台认证此刷新令牌(refresh_token)有效且合法,那么重新生成一组令牌保存在数据库,同时返回这一组令牌到APP(这一组令牌全部都是需要重新生成,并且过期时间重新全部初始化)
APP同样把成功响应的一组令牌值覆盖掉以前保存在本地的令牌值
成功的情况,此时,可以让用户跳转到首页让用户使用APP
失败的情况,如refresh_token也过期了,这里特别说一下,一般refresh_token的过期时间是比较长的,如果连这个也过期的话,说明用户已经太久没有使用过APP了,需要让用户重新登录


三、token认证接口(可理解为自动登录接口)

此接口相当而言算是请求频率比较多的一个接口,他对token进行认证成功和失败有不同的处理方式;

此接口的请求参数可以参考以下参数:

 1
 2 {
 3
 4 //用户账号,大多数APP用的是手机号登录,这里也可以是其他值,能表名是将要自动登录的用户即可
 5
 6 "username":"13000000007",
 7
 8 //手机设备的唯一值
 9
10 "imei":"928347024892343",
11
12 //token认证令牌
13
14 "token":"4a28d8516d42f4821e6d5782d1a79a7a"
15
16 }

返回参数示例及说明:

 1
 2 {
 3
 4 "status":"0"//响应结果,成功
 5
 6 }
 7
 8 or
 9
10 {
11
12 "status":"1"//响应结果,token过期
13
14 }

说明:

这里如果返回成功,可以让用户跳转到首页使用APP
如果返回token过期,调用第二步的刷新token令牌的接口去重新获取令牌

转载于:https://www.cnblogs.com/xinruyi/p/10382780.html

使用token实现在有效期内APP自动登录功能相关推荐

  1. 安卓APP自动更新功能实现

    安卓APP自动更新功能实现 前言 代码实现 前言 安卓App自动更新基本上是每个App都需要具备的功能,接下来介绍一下实现自动更新的步骤. 代码实现 App自动更新主要分为新版本检测.升级弹窗.下载升 ...

  2. 网站1周内自动登录功能实现

    在很多比较大型的网址例如:CSDN,大家在登录时候会有一个[下次自动登录]的功能,该功能与我们的1周内自动登录功能基本类似.所谓的自动登录无非就是,绕过登录界 面,自动登录到系统主页. 自动登录的原理 ...

  3. 用Airtest和poco实现APP自动登录和退出

    版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 此文章来源于项目官方公众号:"AirtestProject" 前言 今天我们将完成1个实操,来实现APP自动登录 ...

  4. 一篇文章带你搞定 SpringBoot 配合 SpringSecurity 实现自动登录功能

    自动登录是我们在软件开发时一个非常常见的功能,例如我们登录 QQ 邮箱: 很多网站我们在登录的时候都会看到类似的选项,毕竟总让用户输入用户名密码是一件很麻烦的事. 自动登录功能就是,用户在登录成功后, ...

  5. 记录--uniapp上如何实现安卓app微信登录功能(操作流程总结)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 uniapp上如何实现安卓app微信登录功能?下面本篇文章给大家分享一下uniapp上实现安卓app微信登录的权限申请.开发的具体操作流程 ...

  6. java 自动登录功能_jsp实现用户自动登录功能

    理解并掌握cookie的作用以及利用cookie实现用户的自动登录功能,实现下图效果 当服务器判断出该用户是首次登录的时候,会自动跳转到登录界面等待用户登录,并填入相关信息.通过设置cookie的有效 ...

  7. 业务系统实现记住密码和自动登录功能

    业务系统实现记住密码和自动登录功能 公司的业务系统本来是受域控的,用户不需要登录可以直接访问系统.当然,虽然不用人工登录,系统本身会读取电脑的用户名为登录标识,对系统操作权限和记录也是以电脑名.近段时 ...

  8. react招聘项目——使用cookie实现项目自动登录功能

    cookie实现自动登录功能 最近在项目中使用了cookie实现自动登录的功能,下面我将使用项目中的例子来对cookie进行简单的分析. 功能需求是:在用户访问网址的时候,使用cookie对用户的操作 ...

  9. python 自动登录网站_python实现网站用户名密码自动登录功能

    一.概述 公司需要通过网页用户认证登录实现上网,网络设备判断当前帐号12小时没有没上网将会自动断开帐号上网,每天早上上班第一件事就是打开用户认证网页输入. 用户名与密码,有时候要家里通过teamvie ...

最新文章

  1. Dataset之JFT:JFT/FastEval14k数据集的简介、下载、案例应用之详细攻略
  2. 微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
  3. Token的解密和加密
  4. 组件化开发实战_一篇文章搞懂什么是前端“组件化”开发
  5. Centos7 安装 Python3.9
  6. Github查看文件历史提交和修改记录
  7. mysql 访问速度_操作mysql第一次访问速度慢(远程)
  8. 使用浏览器测试Webservers服务时出现提示“The test form is only available for requests from the local machine.”的解决办法
  9. 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
  10. CyclicBarrier源码解读
  11. 3DMax和Maya到底哪个更牛B?
  12. React 父组件获取子组件的方法/数据(useRef
  13. 2014.10.6模拟赛【魔兽争霸】
  14. ThinkPHP3.2.3实现后台登录界面
  15. 【MISC怼题入门系列】BUU-MISC-page2
  16. 路由器:什么是软路由,看完本篇文章你就懂了
  17. 体检报告录入有误,到底是谁的错?
  18. 音频交流会(个人学习向项目)
  19. matlab清除所有变量,但是除了某些变量
  20. 游戏模型外包-【精刚石数位】

热门文章

  1. strace监视系统调用
  2. 【Teradata SQL】禁用和启用数据库用户登录
  3. bzoj 4393 Usaco Fruit Feast
  4. 解决input获取焦点时底部菜单被顶上来问题
  5. Android学习笔记进阶20之得到图片的缩略图
  6. KVM之一:安装准备(基于CentOS6.7)
  7. Qt之QHeaderView自定义排序(获取正确的QModelIndex)
  8. 使用命令行编译Less源文件
  9. 大同大学计算机与网络工程学院,计算机与网络工程学院代表队 在第十一届“蓝桥杯”全国软件和信息技术人才大赛全国决赛中再获佳绩...
  10. java 图文生成图片_java生成图片