微信小程序之怎样识别一个小程序用户
本节主要是说下怎样识别一个小程序的用户,需要用什么数据来做标识呢;
我们应该都知道判断是不是一个用户大部分都是通过userid来判断,如果这个用户访问的应用发送了一个请求,把userid之类的数据发给了服务器,我们可以通过这个字段来确定这是不是一个用户,如果没有这个值的话可能就是一个游客了,但是在微信里的小程序我们怎样拿到这样的id呢?
其实在小程序里当用户访问的时候我们可以借助小程序的api能力获取到一个针对当前小程序的用户id ,他是openid,而且针对同一个小程序同一个人是永远不会改变的,那我们就可以把openid作为一个用户来识别,也可以根据openid 改造成只支持已有的用户体系;
具体怎么实现呢?
这里需要借助后端api的支持,比如php java node等;api的域名需要在小程序后台进行安全域名配置才,然后线上必须是https协议;
官方提供了相关的api:小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。
首先小程序api文档提供了一个wx.login的方法,这个方法是小程序提供的,我们在调用这个api回调中处理返回的数据;
小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器,其实就是把code传给自己的后端接口
开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key。意思就是后端接口使用code获取openid喝sessionkey,sessionkey什么意思呢,简单的说下就是是对用户数据进行加密签名的密钥,可以解密数据;
之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
然后继续 下一步 就是
登录凭证校验 临时登录凭证校验接口是一个 HTTPS 接口,开发者服务器(后端api)使用 临时登录凭证code 获取 session_key 和 openid 等
这个时候时候后端api就可以获得openid了,拿到了当前访问小程序用户的标识;基本流程就是这样的;
而且这个过程是用户无感之的,我们可以在小程序启动的时候 在app onshow的声明周期内完成这个逻辑处理,将openid放到全局变量或者本地缓存;以方便后续使用;
然后有了这个能力后我们就可以完成很多有趣的功能了,比如记录邀请关系 ,分销等(微信发现了会被封的)目前很多应用内都有这样的类似的功能,本质都是一样的。
好了,我这里只是分享了一个实现的思路,具体的官方文档也写了,如果有不明白的地方可以留言交流。
今天就到这里了,请记住,我是智哥,用自己的经验分享有用的东西,拜拜!!
微信小程序之怎样识别一个小程序用户的更多相关文章
- Win32 程序开发:创建一个应用程序窗口
一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...
- 微信小程序开发——打开另一个小程序
微信小程序打开另一个小程序,有两种方法:1.超链接:2.点击按钮. 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json { ... &quo ...
- Appium(四):真实机第一个appium程序、模拟器第一个appium程序、查看元素
1. 真实机第一个appium程序 学完了前面的知识,也将环境搭建好了,接下来我们就正式开始appium的学习了. 在做app自动化的时候,我们肯定是针对某个产品.某个软件进行测试,那么我们一定是先让 ...
- 微信小程序中scoll-view的一个小坑
在微信小程序开发中,有时候swiper-view会出现显示不全的问题,我们可以用scoll-view来把它包裹下,但是要用scoll-view就一定要设置height,而我们经常是在页面中加的这个组件 ...
- 小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码
因为我们需要用户扫码进入小程序,每一个货柜都有一个对应的二维码,当然每个二维码里的信息也不一样.用户扫码进入小程序之后,二维码的信息会以参数q带进去,而我们只能在onLoad事件中拿到这个参数, 但是 ...
- 在android程序中打开另一个应用程序
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名 ...
- iOS 如何在一个应用程序中调用另一个应用程序
原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯. iOS应用之间的调用步骤: 一, 调用自己 ...
- Redola.Rpc 的一个小目标
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Complete requests: 20000 ...
- 【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)
转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取 (Matlab 程序详解) ...
随机推荐
- Appium教程——Desired Capabilities 详解(转自TesterHome)
Desired Capabilities在启动session的时候是必须提供的. Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情 ...
- C#工具类之字典扩展类
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- Go语言基础之10--面向对象编程2之方法
一.方法的定义 之前我们学习了结构体(struct),其仅仅是对数据的封装,并没有行为方法,还不是一个完全的面向对象的思路,所以现在我们来学习在结构体的基础上如何去定义一个方法.结构体(类)+方法=完 ...
- Yii2 前台控制器访问权限控制
class BaseController extends Controller { public function behaviors() { return [ 'access' => [ 'c ...
- Yii2 urles
public function rules(){ return [ //必须填写 ['email, username, password,agree,verifyPassword,verifyCode ...
- 分布式思想和rpc解决方案介绍
1.RPC的诞生 RPC(Remote Procedure Call)远程过程调用,通过这个rpc协议,调用远程计算机上的服务,就像调用本地的服务一样. 不同的服务部署在不同的机器上面,并且在启动后在 ...
- Linux 进程间通信之管道(pipe),(fifo)
无名管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信: 定义函数: int pipe(int f ...
- public class 与 class 的区别
public class 与 class 的区别 1.一个类前面的public是可有可无的 2.如果一个类使用 public 修饰,则文件名必须与类名一致 3.如果一个类前面没有使用public修饰, ...
- window对象的事件:onresize、onpageshow、onload
onresize事件非常容易理解: 即当窗口或者框架的大小发生变化时,就会触发此事件. 实例demo onpageshow事件是当用户浏览网页时触发的. onpageshow 事件类似于 onload ...
- CentOS 开机自启动脚本
开机时执行自己的脚本. 1.编写自己的服务脚本 进入系统服务脚本目录: cd /etc/rc.d/init.d/ vi test 内容如下: #!/bin/bash # # chkconfig: - ...