微信小程序登录逻辑
wx.getStorage({
key: 'session_id',
success: function(res) {
//如果本地缓存中有session_id,则说明用户登陆过
console.log("本地缓存中的session_id:" + res.data)
//判断微信服务器session是否有效
wx.checkSession({
success: function(res) {
console.log("处于登录态,session有效");
//如果已经授权过了并且session有效,则直接跳转到业务页面
wx.switchTab({
url: '/pages/leader/leader',
complete: function(res) {}
})
},
fail: function(res) {
//如果微信服务端的session已经无效,需要重新执行登录的过程
// 登录
wx.login({
success: function(res) {
console.log(res)
that.setData({
code: res.code
})
}
}),
// 获取用户信息
wx.getSetting({
success: res => {
//判断用户是否授权
if (res.authSetting['scope.userInfo']) {
console.log("用户同意获取基本信息");
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
lang: "zh_CN",
success: res => {
console.log("获取到的用户信息:" + res.userInfo.nickName);
console.log("获取到的加密信息:" + res.encryptedData);
console.log("获取到的code:" + that.data.code);
console.log("获取到的iv:" + res.iv);
var url = app.globalData.ApiUrl + "/KingSmall/wxlogin";
wx.request({
url: url,
data: {
code: that.data.code,
encryptedData: res.encryptedData,
iv: res.iv
},
success(res) {
console.log("返回的session_id:" + res.data);
wx.setStorage({
key: 'session_id',
data: res.data,
}),
//处理成功,跳转到对应的页面
wx.switchTab({
url: '/pages/leader/leader',
complete: function (res) { }
})
}
})
}
})
} else {
console.log("用户拒绝获取基本信息");
}
}
})
},
complete: function(res) {},
})
},
//如果获取不到本地的sessionid 则让用户重新登录
fail: function(res) {
console.log("获取失败的session_id:" + res.data);
// 登录
wx.login({
success: function(res) {
console.log(res)
that.setData({
code: res.code
})
}
}),
// 获取用户信息
wx.getSetting({
success: res => {
//判断用户是否授权
if (res.authSetting['scope.userInfo']) {
console.log("用户同意获取基本信息");
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
lang: "zh_CN",
success: res => {
console.log("获取到的用户信息:" + res.userInfo.nickName);
console.log("获取到的加密信息:" + res.encryptedData);
console.log("获取到的code:" + that.data.code);
console.log("获取到的iv:" + res.iv);
var url = app.globalData.ApiUrl + "/KingSmall/wxlogin";
wx.request({
url: url,
data: {
code: that.data.code,
encryptedData: res.encryptedData,
iv: res.iv
},
success(res) {
console.log("返回的session_id:" + res.data);
wx.setStorage({
key: 'session_id',
data: res.data,
})
//处理成功,跳转到对应的页面
wx.switchTab({
url: '/pages/leader/leader',
complete: function(res) {}
})
}
})
}
})
} else {
console.log("用户拒绝获取基本信息");
}
}
})
}
}),
微信小程序登录逻辑的更多相关文章
- [转]微信小程序登录逻辑梳理
本文转自:http://www.jianshu.com/p/d9996cafdb31 官方文档 文档相关地址: 用户登录 获取用户数据 用户数据的签名验证和加解密 ...
- ASP.NET WebAPI 双向token实现对接小程序登录逻辑
最近在学习用asp.net webapi搭建小程序的后台服务,因为基于小程序端和后台二者的通信,不像OAuth(开放授权),存在第三方应用.所以这个token是双向的,一个是对用户的,一个是对接口的. ...
- 基于Shiro,JWT实现微信小程序登录完整例子
小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html ...
- 全栈项目|小书架|微信小程序-登录及token鉴权
小程序登录 之前也写过微信小程序登录的相关文章: 微信小程序~新版授权用户登录例子 微信小程序-携带Token无感知登录的网络请求方案 微信小程序开通云开发并利用云函数获取Openid 也可以通过官方 ...
- Flask与微信小程序登录(后端)
开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + flask + 微信小程序实现用户快速注册登录方案(本文主要进行后 ...
- Spring Security 整合 微信小程序登录的思路探讨
1. 前言 原本打算把Spring Security中OAuth 2.0的机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录的流程有点不一样 ...
- 微信小程序登录方案
微信小程序登录方案 登录程序 app.js 调用wx.login获取code 将code作为参数请求自己业务登录接口获取session_key 存储session_key 如果有回调执行回调 App( ...
- 微信小程序登录,获取code,获取openid,获取session_key
微信小程序登录 wx.login(Object object) 调用接口获取登录凭证(code).通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session ...
- 微信小程序登录JAVA后台
代码地址如下:http://www.demodashi.com/demo/12736.html 登录流程时序登录流程时序 具体的登录说明查看 小程序官方API 项目的结构图: springboot项目 ...
随机推荐
- 微信小程序—文件系统
文件系统 文件系统是小程序提供的一套以小程序和用户维度隔离的存储以及一套响应的管理接口.通过wx.getFilesSystemManager()可以获取到全局唯一的文件管理器,所有文件管理操作通过Fi ...
- 洛谷3825 [NOI2017]游戏 2-sat
原文链接http://www.cnblogs.com/zhouzhendong/p/8146041.html 题目传送门 - 洛谷3825 题解 我们考虑到地图中x的个数很少,最多只有8个. 所以我们 ...
- Vijos1983 NOIP2015Day2T3 运输计划 transport LCA
题目链接Vijos 题目链接UOJ 该博客在博客园的链接 转载一个大佬的题解: 点击这里->大佬题解 下面谈谈我的感悟: 当然写代码也是写的很艰辛: 我力劝C++的同胞们,这题卡常数,Dfs党会 ...
- 实践出真知-所谓"java没有指针",那叫做引用!
java没有指针,那我们如何实现动态数组呢? 上篇评论提及 ”不仅有vector,还有ArrayList,还有List,可做选择“. "java没有指针",那叫做引用! 今天尝试了 ...
- 2017-2018-1 20179202《Linux内核原理与分析》第三周作业
一.mykernel 实验 : 1.深度理解函数调用堆栈: 上周已经一步步地分析过含有变量的函数调用时堆栈的变化,现在对堆栈框架进行一些补充,以以下程序为例: int main() { ... g(x ...
- Java中位运算符的使用
先预知识: 数据在计算机中是以二进制的形式进行存储的,而二进制在内存中是以补码的形式进行存储的.在介绍位运算之前,首先来看一下原码.反码和补码的概念.由于正数的原码.反码和补码的形式都是一样的,所以以 ...
- SpringBoot使用AOP
本文介绍SpringBoot中使用Spring AOP. 简介 AOP简介 AOP可能对于广大开发者耳熟能详,它是Aspect Oriented Programming的缩写,翻译成中文就是:面向切面 ...
- BZOJ4739 : 定向越野
起点/终点向每个圆的切点连边. 任意两个圆的公切点之间连边. 同一圆上相邻两个关键点之间连边. 然后Dijkstra求最短路即可,时间复杂度$O(n^3)$. 注意判边可行性的时候要忽略这条边来源的圆 ...
- BZOJ2240 : ural1676 Mortal Combat
首先如果最大匹配不足$n$个那么显然每条边都不可能在匹配为$n$的方案中. 对于一条边$(u,v)$,如果它可能在最大匹配中,有两种情况: $1.(u,v)$是当前方案的匹配边. $2.$可以沿着$( ...
- C++程序设计方法3:类中的静态成员
在类型前面加static修饰的数据成员,是隶属于类的,成为类的静态数据成员,也称为“类的变量” 静态数据成员被该类的所有对象共享(即所有对象中的这个数据域实际上处于同一个内存位置) 静态数据要在实现文 ...