微信小程之登录
前言
微信小程序发布出来,很快就在互联网引发了一场风波。很多人都跃跃欲试,可是就登录这一块,搞了好久都搞不住。所以我来总结一下。可能以后会有变更,但至少目前是这个样子
原理
用户进入小程序后,肯定有一部分要与后端交互的。然后我们在这个交互的地方启动验证。
比方说进入首页,首页可能会显示list吧,list你肯定要请求接口吧,接口你肯定要带上用户的唯一标识3rd_session吧。然后就在这儿把关,验证3rd是否合法。
当然你也可以每次请求都验证,但是我感觉没必要。只要在进入小程序的第一个与后端交互处验证就行
项目架构
cfg.js

1 var host='https://wxa.chaojisales.com'; 2 var arr={ 3 //请求接口(获取新的3rd_session和验证3rd_session) 4 loginURI:host+'/index.php?g=wxapp&m=Base&a=userLogin', 5 sessionCheckURI:host+'/index.php?g=wxapp&m=memo&a=addMemo' 6 } 7 function gets(arg){ 8 return arr[arg]; 9 } 10 module.exports ={ 11 gets:gets 12 }
util.js

1 var cfg_js=require('cfg.js'); 2 //用户登录 3 function getNewSession(saveSesionOk){ 4 wx.login({ 5 success: function(res) { 6 wx.request({ 7 url: cfg_js.gets('loginURI'), 8 data: {code: res.code}, 9 success: function(res){ 10 var new_session=res.data.session; 11 wx.setStorage({ 12 key:"session", 13 data:new_session, 14 success:function(res){ 15 saveSesionOk(res) 16 } 17 }) 18 } 19 }) 20 } 21 }); 22 } 23 24 25 26 //set本地存储 27 function setStrg(key,value,success){ 28 wx.setStorage({ 29 key:key, 30 data:value, 31 success: function(res){ 32 success(res) 33 } 34 }) 35 } 36 37 //get本地存储 38 function getStrg(key,success,fail){ 39 wx.getStorage({ 40 key: key, 41 success: function(res){ 42 success(res) 43 }, 44 fail: function(res) { 45 fail(res) 46 } 47 }) 48 } 49 50 51 //封装post请求 52 function post(url,data,success){ 53 wx.request({ 54 url: url, 55 data:data, 56 method: 'POST', 57 header: {'content-type': 'application/x-www-form-urlencoded'}, 58 success: function(res) { 59 success(res) 60 } 61 }) 62 } 63 64 //封装get请求 65 function got(url,data,success){ 66 wx.request({ 67 url: url, 68 data:data, 69 header: {'content-type': 'application/json'}, 70 success: function(res) { 71 success(res) 72 } 73 }) 74 } 75 76 77 //3rd_session检测 78 function sessionCheck(session,success){ 79 //0代表不合法,1代表ok 80 var url= cfg_js.gets('sessionCheckURI')+"&session="+session; 81 post(url,{},function(res){ 82 success(res) 83 }) 84 } 85 86 87 //第一次验证。一般情况下,登录只需要在程序开始的第页面验证一次就好 88 function firstReqest(sessionCheckOk){ 89 // ---------------------------------验证登录开始------------------------------ 90 getStrg("session",function(res){ 91 //获取本地seesin成功 92 var session=res.data; 93 sessionCheck(session,function(res){ 94 var status=res.data; 95 status=1;//假设验证成功(本地的3rd_session和服务器的3rd_session一致) 96 //与后台匹配失败 97 if(status==0){ 98 //重新登录 99 getNewSession(function(res){ 100 getStrg("session",function(res){ 101 //获取本地session成功 102 var session=res.data; 103 sessionCheckOk(session) 104 },null) 105 }) 106 }else{ 107 sessionCheckOk(session) 108 } 109 }) 110 },function(res){ 111 //获取本地seesin失败 112 getNewSession(function(res){ 113 getStrg("session",function(res){ 114 var session=res.data; 115 sessionCheckOk(session) 116 },null) 117 }) 118 }) 119 // ---------------------------------结束--------------------------- 120 } 121 122 module.exports = { 123 getNewSession: getNewSession, 124 setStrg:setStrg, 125 getStrg:getStrg, 126 post:post, 127 got:got, 128 sessionCheck:sessionCheck, 129 firstReqest:firstReqest 130 }
index.js

1 var util_js=require('../../utils/util.js'); 2 Page({ 3 data: { 4 content:'未登录' 5 }, 6 //事件处理函数 7 onLoad: function () { 8 var that = this 9 util_js.firstReqest(function(session){ 10 that.setData({content:'登录成功'}) 11 }) 12 } 13 })
index.wxml

1 {{content}}
效果预览
源码下载:https://git.oschina.net/dingshao/WechatApp_login.git