微信小程序登录

article/2025/10/8 9:48:07

前段时间发布了一个微信小程序的简单登录,那段时间我一直在忙着项目,有一天,我清闲下来准备进入小程序群里面看一下来着,刚好有人问问题了,我一看这哥们的问题好像是我写的东西啊,我感觉是时候秀一波了,是时候展现我真正的技术了。我当时正在酝酿如何无形装逼时。这时候出现了一个打脸的。他说这种登录方式不可以使用了,当时我就有点不信了,结果自己测试了真的不可以使用了,没办法,只能更新一版新的了,说实话,那脸打的比较响亮啊快哭了,于是乎就有了今天就帮大家更新了一版。好了,闲话扯到这里结束了。


原来的简单登录是直接在前台获取openid,但是呢微信官方发现这个洞以后就给填了,不让你们玩了,你们在这么玩下去生态圈就没办法维持了,官方直接在安全域名处禁止添加https://api.weixin.qq.com,但是呢以前添加的用户还是可以用的。

如上图显示。

好了废话不多少,直接撸代码,同时在这里整理了一些项目中开发中遇到的一些经验分享给大家。

[plain]  view plain copy
  1. //app.js  
  2. // 这里是调用公共函数库  
  3. var util = require('./utils/util.js')  
  4. App({  
  5.   
  6.     /**  
  7.     * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)  
  8.     */  
  9.     onLaunch: function (options) {  
  10.   
  11.         // 调用API从本地缓存中获取数据  
  12.         var that = this  
  13.         var logs = wx.getStorageSync('logs') || []  
  14.         logs.unshift(Date.now())  
  15.         wx.setStorageSync('logs', logs)  
  16.   
  17.     },  
  18.   
  19.     /**  
  20.     * 当小程序启动,或从后台进入前台显示,会触发 onShow  
  21.     */  
  22.     onShow: function (options) {  
  23.           
  24.         var that = this,  
  25.         // scenes是场景值它的类型是整形  
  26.         scenes = options.scene,  
  27.         // sid是参数,建议兼容ios和android的时候强转换为整形  
  28.         sid = Number(options.query.sid)  
  29.   
  30.         // 获取用户信息  
  31.         that.getUserInfo(function (userInfo) {  
  32.             // 判断场景是否是从公众号进入(这里的意思是如果用户从公众号的自定义菜单进入的话且参数sid为1的话触发什么方法)  
  33.             // 获取场景值在onLaunch方法中也可以获取到,但是呢由于业务要求我们的这个方法需要用户进入就会触发  
  34.             // 各位可以根据需求去决定在哪里获取合适一些,onLaunch是小程序未关闭的情况下只执行一次,所以各位一定要考虑清楚  
  35.             if (scenes === 1035 && sid === 1) {  
  36.                 // 这里是从什么场景下要执行的方法  
  37.             }  
  38.         })  
  39.     },  
  40.   
  41.     /**  
  42.     * 获取用户信息  
  43.     */  
  44.     getUserInfo: function (cb) {  
  45.         var that = this  
  46.       
  47.         if (this.globalData.userInfo) {  
  48.               
  49.             typeof cb == "function" && cb(this.globalData.userInfo)  
  50.           
  51.         } else {  
  52.               
  53.             // 调用登录接口  
  54.             wx.login({  
  55.                 success: function (res) {  
  56.                       
  57.                     // 登录成功  
  58.                     // 在这里登录的时候会返回一个登录凭证,以前是发送一次请求换一个,现在好像是登录凭证有5分钟的有效时间  
  59.                     // 从这种情况来看微信小程序的发展还是不错的,以前估计没多少人访问,现在访问量上去后后台的布局都重新架构了  
  60.                     var code = res.code// 登录凭证  
  61.                       
  62.                     // 获取用户信息  
  63.                     wx.getUserInfo({  
  64.                         // 当你获取用户信息的时候会弹出一个弹框是否允许授权  
  65.                           
  66.                         // 这里点击允许触发的方法  
  67.                         success: function (res2) {  
  68.                           
  69.                             that.globalData.userInfo = res2.userInfo  
  70.   
  71.                             // 准备数据(下面的这些参数都是必须参数,请不要问为什么,看文档去吧)  
  72.                             var data = { encryptedData: res2.encryptedData, iv: res2.iv, code: code }  
  73.                               
  74.                             // 请求自己的服务器(在这里我结合promise封装了一下request请求,下面会把方法给大家分享一下)  
  75.                             util.commonAjax('方法名', 1, data)  
  76.                             .then(function (resolve) {  
  77.                                 // 这里自然不用解释了,这是接口返回的参数  
  78.                                 if (resolve.data.status === '200') {  
  79.                                     // 成功  
  80.                                     wx.setStorageSync('userInfo',  resolve.data.data)  
  81.                                     // 新手们注意一下,记得把下面这个写到这里,有好处。  
  82.                                     typeof cb == "function" && cb(that.globalData.userInfo)  
  83.                                 } else {  
  84.                                     // 失败  
  85.                                 }  
  86.                             })  
  87.                         },  
  88.                           
  89.                         // 这里是点击拒绝触发的方法  
  90.                         fail: function (res2) {  
  91.                             // 在这里做一下兼容,有些同行业的用户会点击拒绝玩一玩看你们的小程序是否存在bug,  
  92.                             // 所以在这里还是加上下面这两行代码吧,打开微信小程序的设置,允许小程序重新授权的页面  
  93.                             wx.openSetting({  
  94.                                 success: (res) => {  
  95.                                     // 下面的代码格式按照我的写,不要看工具打印的什么,在这里提醒大家一句,有时候不能相信开发者工具,因为  
  96.                                     // android和ios还有工具底层的js库是不同的,有些时候坑的你是一点脾气也没有,所以大家注意一下,  
  97.                                     // 不相信的慢慢的去自己跳坑吧  
  98.                                     if (res.authSetting["scope.userInfo"]) {  
  99.                                         // 进入这里说明用户重新授权了,重新执行获取用户信息的方法  
  100.                                         that.getUserInfo()  
  101.                                     }  
  102.                                 }  
  103.                             })  
  104.                         }  
  105.                     })  
  106.                 }  
  107.             })  
  108.         }  
  109.     },  
  110.   
  111.     /**  
  112.     * 全局变量配置(在这里放一些常量和配置文件,如果公共参数多的话大家也可以去重新布局一个文件,在里面进行设置)  
  113.     */  
  114.     globalData: {  
  115.         userInfo: null,  
  116.         url: '这是接口的url'  
  117.     }  
  118. })  
  119.   
  120. // 下面是util.js的东西  
  121.   
  122. /**  
  123.  * request请求封装  
  124.  * url   传递方法名  
  125.  * types 传递方式(1,GET,2,POST)  
  126.  * data  传递数据对象  
  127.  */  
  128. function commonAjax(url, types, data) {  
  129.       
  130.     // 获取公共配置  
  131.     var app = getApp()  
  132.     
  133.     // 公共参数(一般写接口的时候都会有些公共参数,你可以事先把这些参数都封装起来,就不用每次调用方法的时候再去写,)  
  134.     var d = {  
  135.         token: '123456789',// 例如:这是我们自己的验证规则  
  136.     }  
  137.     
  138.     // 合并对象(公共参数加传入参数合并对象) mergeObj对象在下面  
  139.     var datas = mergeObj(d, data)  
  140.   
  141.     // 这是es6的promise版本库大概在1.1.0开始支持的,大家可以去历史细节点去看一下,一些es6的机制已经可以使用了  
  142.     var promise = new Promise(function (resolve, reject, defaults) {  
  143.     // 封装reuqest  
  144.     wx.request({  
  145.       url: app.globalData.url + url,  
  146.       data: datas,  
  147.       method: (types === 1) ? 'GET' : 'POST',  
  148.       header: (types === 1) ? { 'content-type': 'application/json' } : { 'content-type':'application/x-www-form-urlencoded'},  
  149.       success: resolve,  
  150.       fail: reject,  
  151.       complete: defaults,  
  152.     })  
  153.   });  
  154.   return promise;  
  155. }  
  156.   
  157. /**  
  158.  * object 对象合并  
  159.  * o1     对象一  
  160.  * o2     对象二  
  161.  */  
  162. function mergeObj(o1, o2) {  
  163.   for (var key in o2) {  
  164.     o1[key] = o2[key]  
  165.   }  
  166.   return o1;  
  167. }  
  168.   
  169. function formatTime(date) {  
  170.   var year = date.getFullYear()  
  171.   var month = date.getMonth() + 1  
  172.   var day = date.getDate()  
  173.   
  174.   var hour = date.getHours()  
  175.   var minute = date.getMinutes()  
  176.   var second = date.getSeconds()  
  177.   
  178.   
  179.   return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')  
  180. }  
  181.   
  182. function formatNumber(n) {  
  183.   n = n.toString()  
  184.   return n[1] ? n : '0' + n  
  185. }  
  186.   
  187. module.exports = {  
  188.   formatTime: formatTime,  
  189.   commonAjax: commonAjax,  
  190. }  

上面的一些封装,大家可以根据自己的喜好去修改,毕竟一个人一个风格吗,代码写的有一些乱,大家见谅一下,因为项目有点乱,我现在也有点头大,不知道该把哪些东西归为一类讲个大家,所以显得有点乱,但是呢,上面的代码包括封装都是线上经过实战检测没问题的代码,至于后台的代码会在下个帖子中发表。



 付一段代码,望各位参考一下



http://chatgpt.dhexx.cn/article/JOpgoHMI.shtml

相关文章

小程序微信小程序设计登录页面

Page({data: {phone: ,password: ,success: false,text: },// 获取输入账号 phoneInput: function (e) {this.setData({phone: e.detail.value})},// 获取输入密码 passwordInput: function (e) {this.setData({password: e.detail.value})},// 登录 login: function () {var t…

微信小程序登录页面的实现

微信小程序登录页面 实现在进入微信小程序首页前的登录验证页面&#xff0c;这里有两种方法&#xff0c;但其实原理都是一样的。 1. 在首页中加入一个弹窗作为登录窗口&#xff0c;效果如下图&#xff1a; (1)index.wxml 登录窗口代码如下&#xff1a; <view class"…

微信小程序实战(一)---实现登录界面

昨天小程序第一天公测&#xff0c;就下载个小程序自带IDE玩了玩&#xff0c;看了看API&#xff0c;撸出了个登录界面给大家分享下。 下面是主界面和代码。 index.wxml <view class"container"><view class"usermotto"><text class"us…

微信小程序云开发 之 登录注册界面 详细教程

文章目录 前言一、前期的准备&#xff08;很重要&#xff09;1.程序的需求2.微信开发者文档3.数据库的设计 二、小程序设计阶段1.选择开发方式2.云开发第一步&#xff1a;注册微信小程序&#xff0c;获取小程序的 AppID第二步、创建小程序项目 第三、登录界面的设计1.登录2.注册…

微信小程序的登录界面实现

微信小程序的登录界面实现 <view class"container"><view class"wrapper"><view class"left-top-sign">LOGIN</view><view class"welcome">欢迎回来&#xff01;</view><view class"inp…

微信小程序 如何实现登录

业务流程&#xff1a; 1&#xff1a;首先需要一个按钮触发事件 2&#xff1a;调用微信小程序的登录接口wx.login&#xff0c;拿到code 3&#xff1a;调用微信小程序的获取用户信息的接口wx.getUserProfile&#xff0c;拿到用户的个人信息 4&#xff1a;拿到的个人信息调用后…

小程序登录流程

用户登录是一个系统的必备功能。而小程序的登录流程和Web端又有一些不同&#xff0c;主要是要与微信服务器进行通信验证。下面我们就来看下小程序具体的登录流程。 1.通过 wx.login() 获取到用户的code判断用户是否授权读取用户信息&#xff0c;调用wx.getUserInfo 读取用户…

微信小程序之登录页-------实例

最近在学习微信小程序&#xff0c;下面提供自己做的微信小程序登录页面&#xff0c;仅供参考。 效果图&#xff1a; 目录结构&#xff1a; 图片&#xff1a; name.png key.png 下面是代码&#xff1a; login.wxml&#xff1a; <!--pages/login/login.wxml--> <vie…

微信小程序的登录流程

基本流程&#xff1a; 1、调用 wx.login() 获取 临时登录凭证code &#xff0c;并回传到开发者服务器。 2、调用 auth.code2Session 接口&#xff08;本接口应在服务器端调用&#xff09;&#xff0c;换取 用户唯一标识 OpenID 、 用户在微信开放平台帐号下的唯一标识 UnionID&…

微信小程序实现登录页面

wxml文件&#xff1a; <view class"container"> <view class"login-icon"> <image class"login-img" src"../../img/loginLog.jpg"></image> </view> <view class"login-from"> <!…

微信小程序入门(登录页面)

1.首先前往开发者工具下载安装开发工具&#xff1a; 2.安装后微信扫码&#xff0c;并填写自己的AppID选择自己的项目目录后登录&#xff1a; 登陆后点击工具上的编译按钮&#xff0c;可以在工具的左侧模拟器界面看到这个小程序的表现&#xff0c;也可以点击预览按钮&#xff0c…

微信小程序之登录注册界面的实现

初步分析&#xff0c;程序一共有两个界面即&#xff1a;登录界面和注册界面。 但是注册的时候由于不同的注册方式应该有不同的界面支持&#xff0c;故在本程序中我们要写两个注册界面和一个登录界面&#xff0c;两个注册界面分别位手机注册界面和企业用户注册界面。 在微信小程…

微信小程序之登录

目录 1、登录流程时序 1.1、wx.login(Object object) 1.1.1、功能描述 1.1.2、参数 1.1.3、object.success 回调函数 1.2、auth.code2Session 1.2.1、请求地址 1.2.2、请求参数 1.2.3、返回值 2、使用微信登录 2.1、小程序端js文件 2.2、云函数端js文件 3、获取手机…

微信小程序 16 登录界面

16.1 登录界面 html <view class"container"><view class"wrapper"><view class"left-top-sign">LOGIN</view><view class"welcome">欢迎回来&#xff01;</view><view class"input-con…

微信小程序登录注册界面

微信小程序登录注册界面demo,存在不足之处,请指教! 界面图片&#xff1a; 1.js代码&#xff1a; Page({/*** 页面的初始数据*/data: {current:1,codeText:获取验证码,counting:false,},// 登陆注册监听click(e){let index e.currentTarget.dataset.code;this.setData({cur…

微信小程序登录界面的实现

首先是未登录时的界面&#xff0c;提示用户登录之后使用全部的功能。 用户点击登录&#xff0c;调用API拿到用户的信息并在页面中显示出来&#xff0c;同时将用户的信息保存在本地。向后端发送POST请求&#xff0c;拿到code&#xff0c;拿到token&#xff0c;并保存在本地&…

(一)微信小程序云开发之登录界面设计

最近在开发微信小程序&#xff0c;现阶段采用的云开发的方式。云开发与使用本地服务器开发还存在着一定的差异。本地服务器的开发后续记录。这里并没有记录微信小程序的云开发项目的创建方式。 先对微信小程序简单的登录界面做出实例。 1、登录界面UI 2、代码 2.1wxml login…

微信小程序开发(2)—— 简单的页面登陆实现

微信小程序开发&#xff08;2&#xff09; 二、简单的登陆实现&#xff08;非授权登录&#xff09;新建文件夹进入login.wxml界面进入login.wxss进入login.js进入json进入app.json效果图 二、简单的登陆实现&#xff08;非授权登录&#xff09; 新建文件夹 文件夹内新建js、wx…

微信小程序简洁登录页面(附源码)

文章目录 1.登录页面2.用户不存在3.代码3.1 login.wxml3.2 login.css3.3 login.js 4*斜体样式*.总结 1.登录页面 登录的具体流程 1.当用户输入密码和账号后首先检验账号和密码是否为空 2.若不为空&#xff0c;则将输入的账号发送到后端&#xff0c;首先判断账号是否存在 3.若账…