微信小程之登录

前言
微信小程序发布出来,很快就在互联网引发了一场风波。很多人都跃跃欲试,可是就登录这一块,搞了好久都搞不住。所以我来总结一下。可能以后会有变更,但至少目前是这个样子

原理
用户进入小程序后,肯定有一部分要与后端交互的。然后我们在这个交互的地方启动验证。
比方说进入首页,首页可能会显示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 }
View Code
复制代码

 

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 }
View Code
复制代码

 

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 })
View Code
复制代码

 

index.wxml

1 {{content}}
View Code

 

效果预览

 

源码下载:https://git.oschina.net/dingshao/WechatApp_login.git

 

posted @   丁少华  阅读(945)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示