• 微信小程序 登录


    app.js

    // app.js
    const interfaces = require("./utils/urlconfig")
    App({
      onLaunch() {
        // 展示本地存储能力
        const logs = wx.getStorageSync('logs') || [];
        logs.unshift(Date.now())
        wx.setStorageSync('logs', logs);
    
        this.getUserMsg();
      },
      //获取登录权限后  调取服务器接口 传递 code 
      getUserMsg() {
        // 获取用户信息
        wx.getSetting({
          success: res => {
            if (res.authSetting['scope.userInfo']) {
              const that = this;
              // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
              wx.login({
                success: function (res) {
                  var code = res.code; //登录凭证
                  if (code) {
                    //2、调用获取用户信息接口
                    wx.getUserInfo({
                      lang: 'zh_CN',
                      success: function (res) {
                        //3.请求自己的服务器,解密用户信息 获取unionId等加密信息
                        let obj = {
                          encryptedData: res.encryptedData,
                          iv: res.iv,
                          code: code,
                          type: 3
                        }
                        wx.request({
                          url: interfaces.decodeUserInfo, //自己的服务接口地址
                          method: 'post',
                          header: {
                            'content-type': 'application/x-www-form-urlencoded'
                          },
                          data: {
                            encryptedData: res.encryptedData,
                            iv: res.iv,
                            code: code,
                            type: 3
                          },
                          success: function (data) {
                            //4.解密成功后 获取自己服务器返回的结果
                            console.log(data, '-----------------')
                            if (data.data.status == 1) {
                              var userInfo = data.data.userInfo;
                              // userInfo.isAdmin = false;
                              userInfo.isGetInfo = false;
                              // userInfo.schoolId = null;
                              that.globalData.userInfo = userInfo;
                              that.globalData.session_key = data.data.session_key;
                              that.globalData.openId = data.data.openId;
                              that.globalData.hasUserInfo = true;
                              if (that.userInfoReadyCallback) {
                                that.userInfoReadyCallback(data)
                              }
                            } else {
                              console.log('解密失败')
                            }
                          },
                          fail: function () {
                            console.log('系统错误')
                          }
                        })
                      },
                      fail: function (res) {
                        console.log(res);
                        console.log('获取用户信息失败' + res);
                      }
                    })
                  } else {
                    console.log("获取用户登录凭证失败");
                  }
                },
                fail: function () {
    
                }
              })
            } else {
              console.log("未登录授权");
              that.globalData.hasLogin = false;
              if (that.userInfoReadyCallback) {
                that.userInfoReadyCallback({
                  data: {
                    userInfo: null
                  }
                })
              }
            }
          }
        })
    
      },
      onShow() {
        const self = this;
        wx.getStorage({
          key: 'userInfo',
          success(res) {
            if (res.data) {
              self.globalData.userInfo = res.data;
            }
          }
        })
    
        //获取顶部导航栏胶囊部分高度
        let menuButtonObject = wx.getMenuButtonBoundingClientRect();
        wx.getSystemInfo({
          success: (res) => {
            // console.log(res.windowHeight*2)
            let statusBarHeight = res.statusBarHeight;
            const navTop = menuButtonObject.top; //胶囊按钮与顶部的距离
            const navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2; //导航高度
            let height = res.windowHeight * 2 - navHeight * 2 - 40 - 315 - 40;
            self.globalData.defineHeader.navHeight = navHeight * 2
            self.globalData.defineHeader.navTop = navTop * 2
          }
        })
      },
      globalData: {
        userInfo: null,
        defineHeader: {
          navHeight: null,
          navTop: null,
        }
      },
    })
    View Code

    第一次获取用户权限 之后才能使用wx.login  返回code 在调用服务器接口 返回openId

      login() {
        wx.getUserProfile({
          desc: '获取你的昵称、头像、地区及性别', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
          success: (res) => {
           app.getUserMsg()
          },
          fail: function () {
            console.log('获取用户信息失败')
          }
        })
      },
    
      onShow: function () {
        let that = this;
        //自定义底部导航栏跳转方法
        if (typeof that.getTabBar === 'function' &&
          this.getTabBar()) {
          this.getTabBar().setData({
            selected: 0
          })
        }
    
        // console.log(app.globalData,'-----------')
        if (app.globalData.userInfo) {
          that.setData({
            userInfo: app.globalData.userInfo,
            hasUserInfo: true
          })
        } else {
          //由于getuserinfo是一个网络请求,可能会在当前page.onload之后才返回
          //为了防止这种情况发生,所以此处加入callback
          app.userInfoReadyCallback = res => {
            that.setData({
              userInfo: res.data.userInfo,
              hasUserInfo: true
            });
          }
        }
      },
    View Code
  • 相关阅读:
    围炉夜话(3)
    围炉夜话(2)
    一步步学习SPD2010--第十一章节--处理母版页(9)--导出母版页
    一步步学习SPD2010--第十一章节--处理母版页(8)--从母版页创建网页
    一步步学习SPD2010--第十一章节--处理母版页(7)--管理Content Placeholders
    一步步学习SPD2010--第十一章节--处理母版页(6)--改变默认母版页
    一步步学习SPD2010--第十一章节--处理母版页(5)--自定义母版页
    一步步学习SPD2010--第十一章节--处理母版页(4)--复制和保存母版页
    一步步学习SPD2010--第十一章节--处理母版页(3)--母版页上使用的控件
    如何使用外部数据列创建SP列表
  • 原文地址:https://www.cnblogs.com/lvlisn/p/15672590.html
Copyright © 2020-2023  润新知