微信小程序用户验证初探

2017-07-11  本文已影响0人  寒潭碎梦

背景#

在进行微信小程序开发时,对于用户身份如何验证一直没有找到好的解决方法,就自己思考了一个逻辑,进行用户身份验证.

逻辑说明#

验证逻辑图

实现过程#

获取token并判断是否获取成功##

App({
  data: {
      'api_url' : 'https://baoxiu.hrsc.cc/index.php/index/',
      'source_url' : 'https://baoxiu.hrsc.cc/'
  },
  onLaunch: function () {
    wx.getStorage({
      key: 'token',
      success: function(storage){
        that.globalData.token = storage.data;
        wx.request({
          url: that.data.api_url + 'Login/checkLogin',//后台验证登录
          data: {
            token : storage.data
          },
          method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
          header: {
            'content-type': 'application/json'
          }, // 设置请求的 header
          success: function(res){
            if(res.data.errorcode == 0) {//后台判断已经登录
              that.globalData.userInfo = res.data.userInfo;//保存登录信息
            } else if(res.data.errorcode == 40001) {//后台判断没有登录
              go_login();//调用登录函数
            } else {
              wx.showToast({
                title: '登录失败',
                duration: 2000
              });//显示报错信息
            }
          }
        });
      },
      fail: function(){//获取本地保存的token失败
        //调用登录接口
        wx.login({
          success: function (code) {//获取登录code
            wx.getUserInfo({
              success: function (info) {//获取个人资料信息
                wx.request({
                  url: that.data.api_url + 'Login/getUserInfo',//后台获取个人信息
                  data: {
                    'code': code.code,
                    'info': info.userInfo
                  },
                  method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
                  header: {
                    'content-type': 'application/json'
                  }, // 设置请求的 header
                  success: function(res){//用code换取openid返回信息
                    wx.setStorage({
                      key: 'token',
                      data: res.data.token,
                      success: function(){//保存token验证信息
                        that.globalData.token = res.data.token;
                        if(res.data.errorcode == 0) {//获取个人信息成功,将个人信息进行保存
                          that.globalData.userInfo = {
                            uid: res.data.uid,
                            nickName: info.userInfo.nickName,
                            avatarUrl: info.userInfo.avatarUrl,
                            tel: res.data.tel,
                            address: res.data.address,
                          };
                        } else {
                          wx.showToast({
                            title: '个人信息验证失败',
                            duration: 2000
                          });//显示报错信息
                        }
                      }
                    });
                  }
                });
              },
              fail: function() {
                wx.showToast({
                  title: '使用需要授权,请删除后重新使用!',
                  duration: 2000
                });//显示报错信息
              },
            });
          }
        });
      }
    });
  }
});

调用的登录函数##

function go_login(cb) {
  wx.login({
    success: function(res){
      wx.request({
        url: getApp().data.api_url + 'Login/login',
        data: {
          'code': res.code
        },
        method: 'POST', 
        header: {
          'content-type': 'application/json'
        }, // 设置请求的 header
        success: function(res){//请求登录返回数据
          if(res.data.errorcode == 0) {
            wx.setStorage({
              key: 'token',
              data: res.data.token,
              success: function(){
                getApp().globalData.token = res.data.token;
                getApp().globalData.userInfo = {
                  uid: res.data.uid,
                  nickName: res.data.nickName,
                  avatarUrl: res.data.avatarUrl,
                  tel: res.data.tel,
                  address: res.data.address,
                };
                typeof cb == "function" && cb();//这里可以跟登录成功后的回调函数
              }
            });
          } else {
              wx.showToast({
                title: '登录失败',
                duration: 2000
              });//显示报错信息
          }
        }
      })
    }
  });
}
上一篇下一篇

猜你喜欢

热点阅读