我感觉这个书上的微信小程序登陆写得不好

基本功能是OK,但是感觉传的数据太多,不安全,需要改写。

App({
  d: {
    hostUrl: ‘http://www.test.com/index.php‘, //请填写您自己的小程序主机URL
    appId: "xxx",
    appKey: "xxx",
    ceshiUrl: ‘http://www.test.com/index.php‘,//请填写您自己的测试URL
  },
  //小程序初始化完成时触发,全局只触发一次
  onLaunch: function () {
    //调用API从本地缓存中获取数据
    var logs = wx.getStorageSync(‘logs‘) || []
    logs.unshift(Date.now())
    wx.setStorageSync(‘logs‘, logs);
    //login
    this.getUserInfo();
  },
  getUserInfo: function (cb) {
    var that = this
    if (this.globalData.userInfo) {
      typeof cb == "function" && cb(that.globalData.userInfo)
    } else {
      wx.getSetting({
        success: function (res) {
          if (res.authSetting[‘scope.userInfo‘]) {
            wx.login({
              success: function (res) {
                //console.log(res);
                var code = res.code;
                //get wx user simple info
                wx.getUserInfo({
                  withCredentials: true,
                  success: function (res) {
                    //如果已经授权过那么会执行这里代码,console.log("已授权标记");
                    that.globalData.userInfo = res.userInfo;
                    typeof cb == "function" && cb(that.globalData.userInfo);
                    //get user sessionKey
                    that.getUserSessionKey(code);
                    if (that.userInfoReadyCallback) {
                      that.userInfoReadyCallback(res)
                    }
                  }
                });
              }
            })
          } else {
            // 没有授权,重定向到 loading 启动页
            wx.navigateTo({
              url: ‘../tologin/tologin‘,
            })
          }
        }
      })
    }
  },

  getUserSessionKey: function (code) {

    //用户的订单状态
    var that = this;
    wx.request({
      url: that.d.ceshiUrl + ‘/Api/Login/getsessionkey‘,
      method: ‘post‘,
      data: {
        code: code
      },
      header: {
        ‘Content-Type‘: ‘application/x-www-form-urlencoded‘
      },
      success: function (res) {
        //--init data
        var data = res.data;
        if (data.status == 0) {
          wx.showToast({
            title: data.err,
            duration: 2000
          });
          return false;
        }

        that.globalData.userInfo[‘sessionId‘] = data.session_key;
        that.globalData.userInfo[‘openid‘] = data.openid;
        that.onLoginUser();
      },
      fail: function (e) {
        wx.showToast({
          title: ‘网络异常!err:getsessionkeys‘,
          duration: 2000
        });
      },
    });
  },
  //授权登录
  onLoginUser: function () {
    var that = this;
    var user = that.globalData.userInfo;
    wx.request({
      url: that.d.ceshiUrl + ‘/Api/Login/authlogin‘,
      method: ‘post‘,
      data: {
        SessionId: user.sessionId,
        gender: user.gender,
        NickName: user.nickName,
        HeadUrl: user.avatarUrl,
        openid: user.openid
      },
      header: {
        ‘Content-Type‘: ‘application/x-www-form-urlencoded‘
      },
      success: function (res) {
        //--init data
        var data = res.data.arr;
        var status = res.data.status;
        if (status != 1) {
          wx.showToast({
            title: res.data.err,
            duration: 3000
          });
          return false;
        }
        that.globalData.userInfo[‘id‘] = data.ID;
        that.globalData.userInfo[‘NickName‘] = data.NickName;
        that.globalData.userInfo[‘HeadUrl‘] = data.HeadUrl;
        var userId = data.ID;
        if (!userId) {
          wx.showToast({
            title: ‘登录失败!‘,
            duration: 3000
          });
          return false;
        }
        that.d.userId = userId;
      },
      fail: function (e) {
        wx.showToast({
          title: ‘网络异常!err:authlogin‘,
          duration: 2000
        });
      },
    });
  },

  globalData: {
    userInfo: null
  },

  onPullDownRefresh: function () {
    wx.stopPullDownRefresh();
  }

});

如果不想首页自动登陆,在其它页调用登陆:

// pages/user/user.js
var app = getApp()
Page({
  data: {
    userInfo: {},
    orderInfo: {},
    loadingText: ‘加载中...‘,
    loadingHidden: false,
  },
  onLoad: function () {
    var that = this
    //调用应用实例的方法获取全局数据
    app.getUserInfo(function (userInfo) {
      //更新数据
      that.setData({
        userInfo: userInfo,
        loadingHidden: true
      })
    });

    console.log("个人中心:--" + app.d.userId);

    this.loadOrderStatus();
  },
})

原文地址:https://www.cnblogs.com/aguncn/p/11100110.html

时间: 2024-10-07 15:50:31

我感觉这个书上的微信小程序登陆写得不好的相关文章

补充ABP Zero集成微信小程序登陆的BUG修复部分

感谢园友 @turingguo 发布的 https://www.cnblogs.com/turingguo/p/9019026.html  文章,详细介绍了ABP Zero集成微信小程序登陆的实现过程. 经测试,abp的外部登陆有几处bug,在此做记录. 1.xxxxWebHostModule.cs文件 1 public override void PostInitialize() 2 { 3 4 if (!IocManager.Resolve<IMultiTenancyConfig>().I

02月刊(上) | 微信小程序

* { margin: 0; padding: 0 } .con { width: 802px; margin: 0 auto; text-align: center; position: inherit } textarea { width: 800px; height: 300px; display: block } input { width: 120px; height: 40px; margin: 10px auto } #box { font-family: "微软雅黑";

ABP Zero集成微信小程序登陆

首先是ABPZero的第三方登陆模块,通过调用第三方的登录接口返回用户信息,再交给ABP的登陆验证模块去执行对应的登陆注册. 涉及的数据库表主要是这两个表,AbpUsers存储了用户信息,AbpUserLogins存储了登陆方式,第三方登陆的信息就是存储在这里的 主要是四个字段 LoginProvider ProviderKey TenantId UserId 登陆提供器   用户唯一Id  对应的租户Id和用户Id 首先需要编写一个LoginProvider,代码如下 using System

微信小程序如何把后台返回的多条json数据的时间戳转换为时间放到页面上 (微信小程序 时间戳转换为时间)

小程序端 在utils文件夹下的util.js写入 //时间戳转换时间   function toDate(number){   var n=number * 1000;   var date = new Date(n);   var Y = date.getFullYear() + '/';   var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '/';   var D = date

微信小程序-登陆、支付、模板消息

wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key).用户数据的加解密通讯需要依赖会话密钥完成. OBJECT参数说明: success返回参数说明: 示例代码: //app.js App({ onLaunch: function() { wx.login({ success: function(res) { if (res.code) { //发起网络请求 wx.reque

[小程序]微信小程序登陆并获取用户信息

1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口 2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid,这个id是用户唯一的id并且不会改变,可以把这个id返回给小程序端小程序端本地保存openid 3.获取用户信息很简单,并且不需要自己的服务器处理,只需要小程序端提供的API.前端页面wxml使用一个按钮,按钮里增加几个属性,就可以回调到小程序js部分的方法上,并且带着用户的个人信息,如昵称 头像

微信小程序开发日记——高仿知乎日报(上)

本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教程分为以下三篇 微信小程序开发日记--高仿知乎日报(上) 微信小程序开发日记--高仿知乎日报(中) 微信小程序开发日记--高仿知乎日报(下) 三篇分别讲不同的组件和功能块 这篇要讲 API分析 启动页 轮播图 日报列表 浮动按钮 侧滑菜单 API分析 以下是使用到的具体API,更加详细参数和返回结

【微信小程序】---线上环境搭建

一.前言 通常我们在本地电脑上开发微信小程序,调用和访问小程序会有很多问题.特别是在配有自己后端的情况下,我们通过真机访问我们的小程序会出现不可访问的问题 二.线上环境搭建 在这里我们主要以腾讯云给大家做演示 1.注册并登陆腾讯云   https://cloud.tencent.com/ 2.上传代码 a.把客户端代码和服务端代码放置在微信小程序目录下 b.将客户端代码放置到client文件加中,服务端代码放置在server文件加中 c.把原微信小程序project.config.js文件转移到

从程序员的角度分析微信小程序

昨天朋友圈被微信小程序刷爆了. 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先吐槽 微信小程序只发了200个邀请号,和我预想的一样,张小龙并没有翻我牌,难道就不能雨露均沾吗? 先来了解下什么是微信小程序. 转自知乎 微信也许重申了"我们是一款约炮软件" 微信还提供了一大堆接口和组件(不好意思,说了句废话). 下面是禅叔的观点: 小程序原理就是用JS调用底层native组件,和React Nat