本节主要是说下怎样识别一个小程序的用户,需要用什么数据来做标识呢;

我们应该都知道判断是不是一个用户大部分都是通过userid来判断,如果这个用户访问的应用发送了一个请求,把userid之类的数据发给了服务器,我们可以通过这个字段来确定这是不是一个用户,如果没有这个值的话可能就是一个游客了,但是在微信里的小程序我们怎样拿到这样的id呢?

其实在小程序里当用户访问的时候我们可以借助小程序的api能力获取到一个针对当前小程序的用户id ,他是openid,而且针对同一个小程序同一个人是永远不会改变的,那我们就可以把openid作为一个用户来识别,也可以根据openid 改造成只支持已有的用户体系;

具体怎么实现呢?

这里需要借助后端api的支持,比如php java node等;api的域名需要在小程序后台进行安全域名配置才,然后线上必须是https协议;

官方提供了相关的api:小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。

首先小程序api文档提供了一个wx.login的方法,这个方法是小程序提供的,我们在调用这个api回调中处理返回的数据;

  1. 小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器,其实就是把code传给自己的后端接口

  2. 开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key。意思就是后端接口使用code获取openid喝sessionkey,sessionkey什么意思呢,简单的说下就是是对用户数据进行加密签名的密钥,可以解密数据;

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

然后继续 下一步 就是

登录凭证校验 临时登录凭证校验接口是一个 HTTPS 接口,开发者服务器(后端api)使用 临时登录凭证code 获取 session_key 和 openid 等

这个时候时候后端api就可以获得openid了,拿到了当前访问小程序用户的标识;基本流程就是这样的;

而且这个过程是用户无感之的,我们可以在小程序启动的时候 在app onshow的声明周期内完成这个逻辑处理,将openid放到全局变量或者本地缓存;以方便后续使用;

然后有了这个能力后我们就可以完成很多有趣的功能了,比如记录邀请关系 ,分销等(微信发现了会被封的)目前很多应用内都有这样的类似的功能,本质都是一样的。

好了,我这里只是分享了一个实现的思路,具体的官方文档也写了,如果有不明白的地方可以留言交流。

今天就到这里了,请记住,我是智哥,用自己的经验分享有用的东西,拜拜!!

微信小程序之怎样识别一个小程序用户的更多相关文章

  1. Win32 程序开发:创建一个应用程序窗口

    一.创建一个应用程序窗口 代码如下: // 头文件 #include <windows.h> // 全局变量 WCHAR g_lpszClassName[] = L"CLASSN ...

  2. 微信小程序开发——打开另一个小程序

    微信小程序打开另一个小程序,有两种方法:1.超链接:2.点击按钮. 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json { ... &quo ...

  3. Appium(四):真实机第一个appium程序、模拟器第一个appium程序、查看元素

    1. 真实机第一个appium程序 学完了前面的知识,也将环境搭建好了,接下来我们就正式开始appium的学习了. 在做app自动化的时候,我们肯定是针对某个产品.某个软件进行测试,那么我们一定是先让 ...

  4. 微信小程序中scoll-view的一个小坑

    在微信小程序开发中,有时候swiper-view会出现显示不全的问题,我们可以用scoll-view来把它包裹下,但是要用scoll-view就一定要设置height,而我们经常是在页面中加的这个组件 ...

  5. 小程序踩过的一个小坑---解析二维码decodeURIComponent() url解码

    因为我们需要用户扫码进入小程序,每一个货柜都有一个对应的二维码,当然每个二维码里的信息也不一样.用户扫码进入小程序之后,二维码的信息会以参数q带进去,而我们只能在onLoad事件中拿到这个参数, 但是 ...

  6. 在android程序中打开另一个应用程序

    Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名 ...

  7. iOS 如何在一个应用程序中调用另一个应用程序

    原则上iOS的沙箱原理,是阻止一个app去访问其他app的资源乃至是系统底层的资源的但是我们可以通过一种变相的方式:通过对应的URL模式和其他程序进行通讯. iOS应用之间的调用步骤: 一, 调用自己 ...

  8. Redola.Rpc 的一个小目标

    Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Complete requests: 20000 ...

  9. 【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)

    转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取   (Matlab 程序详解) ...

随机推荐

  1. [JavaScript] New-Agnostic Constructor Pattern

    function User (name, password) { var self = this instanceof User ? this : new User(); if (name != nu ...

  2. maven 设置 编码 ,jdk 版本

    <profile> <id>jdk1.8</id> <activation> <activeByDefault>true</activ ...

  3. C语言中类型限定符

    通常用类型和存储类别来描述一个变量. C90还增加了两个属性:恒常性(constancy).易变性(volatility): 分别用关键字const和volatile来声明. 这两个关键字创建的类型是 ...

  4. c#工具类之Int扩展类

    public static class IntHelper { /// <summary> /// 转换为2进制字符串 /// </summary> /// <param ...

  5. canvas基础入门(二)绘制线条、三角形、七巧板

    复杂的内容都是有简单的线条结合而成的,想要绘制出复杂好看的内容先从画直线开始 canvas绘制直线先认识几个函数 beginPath():开始一条路径,或重置当前的路径 moveTo(x,y):用于规 ...

  6. Yii2 前台控制器访问权限控制

    class BaseController extends Controller { public function behaviors() { return [ 'access' => [ 'c ...

  7. 转载 Some indexes or index [sub]partitions of table VAS.TAB_PUB_CALLLOG have been marked unusable

    http://www.xifenfei.com/2011/12/some-indexes-or-index-subpartitions-of-table-vas-tab_pub_calllog-hav ...

  8. VS 开发中觉得不错的几款插件

    1.C# Outline 2013  {}折叠 2.Indent Guides:为缩进添加竖直线 3.ResXManager:多语言资源文件编辑 4.C# Formatter:代码清理 5.Highl ...

  9. Hive学习(三)Hive的Java客户端操作

    Hive的Java客户端操作分为JDBC和Thrifit Client,首先启动Hive远程服务: hive --service hiveserver 一.JDBC 在MyEclipse中首先创建连接 ...

  10. A. Yet Another Problem with Strings 分块 + hash

    http://codeforces.com/gym/101138/problem/A 感觉有一种套路就是总长度 <= 某一个数的这类题,大多可以分块 首先把集合串按长度分块,对于每一个询问串, ...