zoukankan      html  css  js  c++  java
  • 微信小程之登录

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

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

  • 相关阅读:
    使用Hibernate Annotations 维护多对多关系
    SpringMVC上传文件以流方式判断类型附常用类型
    Timer 及 TimerTask 相关使用代码
    String与StringBuffer与StringBuilder的区别
    Redis系统性介绍
    利用 psyco 让 Python 程序执行更快
    Linux下安装Metasploit破解Oracle登录用户名密码
    Oracle Database 10g Release 2 下载地址
    yum中找不到包时候解决方式
    Oracle 9.2.0.8 及 10.2.0.4 Patch地址
  • 原文地址:https://www.cnblogs.com/dshvv/p/6290239.html
Copyright © 2011-2022 走看看