内容简介:登录原理前面我们耗费在环境搭建上面已经很多时间,这一讲开始真正的和小程序功能对接。
登录原理
前面我们耗费在环境搭建上面已经很多时间,这一讲开始真正的和小程序功能对接。
登录便是小程序的开始,小程序可以方便的使用微信登录,获取用户的个人信息,这样我们就能保留用户的信息和记录用户的操作。我们直接通过一张图进入正题。如图是小程序官方给出的登录过程:
三周学会小程序第三讲:服务端搭建和免费部署 》要搭建服务器了。
2,session
key。微信为登录用户设置的登录session,用户校验登录态和下文中我们用于校验用户信息的正确性。
文档地址
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
因为我们不仅仅需要有登录态,还需要获取用户信息保存到服务器端 所以我们需要获取用户信息,目前我们获取用户信息需要在小程序端使用 button
组件,并将 open-type
指定为 getUserInfo
类型,点击 button
的时候通过 bindgetuserinfo
属性 绑定的 callback
接收用户信息。通过上述方式我们可以获取到 rawData
和 signature
, rawData
是用户信息
因为
signature=sha1(rawData+session_key)
,
所以我们把这两个属性直接传递到服务器端,不仅获取到了用户信息,用于存储到服务器端,还能校验请求数据的真实性。
文档地址
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
所以这样以后,小编对流程图进行了优化,这样可以减少一次服务端的请求,提高响应速度。
1, 简单解释一下,首先在小程序端通过调用 wx.login
和 getUserInfo
获取code 和 用户信息,一起通过 wx.request
发送给开发者服务器端,这样便减少一些请求。
2,调用 jscode2session
接口到微信接口服务获取 session_key
和 openId
,直接对用户信息进行 SHA1
校验,校验成功以后创建自定义登录态,返回自定义登录态到小程序。
3,自定义登录态是什么呢?做过web的朋友都知道 session 和 cookies 可以组合做登录态,我们这里也是模拟这种设计,只是我们会把session存到数据库中,自定义生成 cookies(token) 传递给小程序端,存储到 storage 里面。因为本讲内容较多,所以把数据库存储放到了下一讲。
4, storage 类似于浏览器的 localStorage,用户小程序端方便的存储一些基础数据。
小程序端逻辑实现
现在我们已经理解了怎么做登录验证,那接下来我们开始编写客户端代码。 首先我们需要在 onLoad
方法里面调用 wx.login()
方法, onLoad
方法在页面加载的是就会调用,当页面加载的时候我们就把 code
存入 data
里面,以便后面调用服务端接口的时候使用。因为每次调用 wx.login
对应的 session_key
就会变,所以必须保证 wx.login
的调用 在获取用户信息之前。这时候我们每次刷新页面都会在控制台看到如下输出(我这里使用的是 Command + S 每次会重新编译小程序)
然后我们需要在 question/index.wxml
文件中的按钮上面添加 open-type
和 bindgetuserinfo
,如下
接下来在 question/index.js
里面添加 getUserInfo
方法用于接收点击按钮获取用户信息的回调,回调方法里面的 userInfo
就是我们想要的用户信息。我们再模拟器里面点击按钮,在控制台里面查看具体的信息,具体模拟器和控制台怎么用,我们在《 客户端代码准备和基础功能讲解 》中已经有讲解。
大家应该都知道 JSON
这种数据传输格式,我们下面就使用 wx.request
发送用户信息和 code
到服务器端, wx.request
对于初学者你们可以理解为 ajax
。按照小编的接口定义,我只要发送 signature
, rawData
和 code
到服务器端,然后接收数据。所以我的实现如下。
wx.login
成功以后
url
就是请求的地址,
config.serverHost
是我封装的常量,以便后面修改地址。
method
是请求类型。
data
是请求的
JSON
请求体。
dataType
是定义的请求类型。
success
和
fail
分别是成功和失败的回调,我们会根据返回的
response
做相应的处理。wx.request 会把我返回的内容再包裹一个
data
,所以如上内容登录成功和失败我实际返回的
JSON
如下。
wx.showToast
是提示框,所以当成功以后提示成功,失败以后把message获取到提示给用户。
最后代码中你会看到
和
是为了优化一下体验,当点击登录的时候提示登录中,等待服务端返回数据的时候消失,到此本节小程序部分已经结束。
小程序源码地址
https://github.com/codedrinker/jiuask
本讲 Tag V5
服务端逻辑实现
上面客户端已经完成,开始开发服务端。 首先我们需要定义一个 API
入口 Controller
,用于定义 api/login
接口接收小程序发过来的请求。如下:
根据如上代码,我们找一些关键点讲解一下
1,RestController,定义当前 Controller 为 Restful,最简单的理解就是 @RestController = @ResponseBody + @Controller
2,@Slf4j,Lombok注解,需要在 Idea 插件中安装 Lombok,这样在需要使用日志的时候,直接使用 log.*()就可以了。
3,@RequestBody LoginDTO loginDTO,会把传递过来的 JSON 对象自动序列化成对象。
4,ErrorCodeException 自定义 RuntimeException,根据业务的异常友好的提示到小程序端,具体使用interface和enum实现,源码可以参考
com.codedrinker.error
包下面的类。
对于返回对象的统一封装,便于小程序端接收和处理。
status 是状态码,如果不是200,都是异常。
data 是数据,可以是多种类型。
message 返回的错误信息。
@Data 是lombok 的注解,可以自动生成 set get 方法,省去了自己编写 set get 的麻烦。
下面是对调用微信的 API 进行封装
简单粗暴的讲解一下 Adapter 里面的关键点。
1,@Value("${wechat.appid}") 是 Spring 的自动注解,直接读取 application-*.yml 里面的配置赋值给appid变量。这时候我们的
application-production.yml
里面的配置如下。
appid和secret是在小程序控制台->开发设置->开发者ID里面获取,为了安全,我们不能把这些信息直接提交到代码里面,所以我选择了把它们配置到 Heroku
的环境变量里面,在部署的时候会自动的替换掉 application-production.yml
里面的 ${WECHAT_APPID}
占位符,然后通过 @Value
赋值到 @Service
里面的变量 appid
。具体配置方式如下,还需要先进入 Heroku 的控制台,然后点击Settings 进行配置,记住左边是 application-production.yml
里面的占位符,右边是你小程序的 id 和 secret。
2,OkHttpClient,是使用的 OKHttp,小编觉得这个用起来比 Apache 的 HttpClient 要简单,代码就不需要讲解了,继续要因为一个 pom.xml
文件。
3,JSON.parseObject 直接解析String到对象。
4,throw new ErrorCodeException(CommonErrorCode.OBTAIN OPENID ERROR);
直接返回业务的ErrorCode,
对了,忘记说最重要的一个问题,这次改动需要添加4个pom.xml
已经在原文中添加注释。
服务端源码地址
https://github.com/codedrinker/jiuask-server
本讲 Tag V5
我是浪漫的分割线
问答
如果您对本系列文章有兴趣,欢迎置顶本订阅号,第一时间获取更新。
如果有任何问题,欢迎留言,小编很热衷和大家一起讨论技术问题。
另外小编创建了一个技术交流群,请添加小编微信,切记备注“小程序”,小编拉你进去。【只讨论技术,非诚勿扰】
最好的赞赏是关注和分享
以上所述就是小编给大家介绍的《三周学会小程序(五):登录的原理和实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通Web Analytics 2.0
[美]Avinash Kaushik / 郑海平、邓天卓 / 清华大学出版社 / 2011-4-26 / 48.00元
向数据驱动型决策转变以及如何利用网站数据来获得竞争优势 在过去几年中,互联网、在线营销以及广告经历了巨大的变革,然而大家处理数据的方式跟几十年前相比还是大同小异,停滞不前。网站分析领域的领跑者Analytics kaushik通过《精通Web Analytics 2.0——用户中心科学与在线统计艺术》提出了下一代网站分析的框架,将能很大程度地帮助你提高组织的能动性和对市场的反应速度。 ......一起来看看 《精通Web Analytics 2.0》 这本书的介绍吧!