草庐IT

微信小程序云开发授权登录的简易制作

**inevitable** 2023-04-12 原文

文章目录

一、tabBar的配置

1. 新建文件夹

在app.json中添加如下代码,即可自动生成3个文件夹

同时在与app.json配置文件同级的目录下新建images文件夹,该文件夹用于存放一些图标,如下:

2. 新增tabBar节点

在app.json中,与windows节点同级下添加tabBar节点,配置如下:

配置后的效果图如下:

图标可以去阿里图标库下载

二、添加编译模式

由于登录页面要在"我的"页面中实现,所以为了方便,避免每次都从首页跳转到"我的"页面中,这里我们添加编译模式,添加步骤如下:


这样添加后,每次重新编译时都会率先展示"我的"页面

三、登录页面的设计

1. wxml结构

<view class="login-container">
  <image src="/images/contact-filled.png" class="contact-filled" mode="widthFix"></image>
  <button class="btn-login">一键登录</button>
  <text class="tip-text">登录后尽享更多权益</text>
</view>

2. wxss样式

page {
  background-color: #f8f8f8;
}

.login-container {
  height: 900rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
}

/* 图标的样式 */
.contact-filled {
  width: 150rpx;
  margin-bottom: 16rpx;
}

/* 登录按钮的样式 */
.btn-login {
  width: 90%;
  border-radius: 100px;
  margin: 15px 0;
  background-color: #c00000;
  color: #f8f8f8;
}

/* 按钮下方提示消息的样式 */
.tips-text {
  font-size: 12px;
  color: gray;
}

3. 导航栏样式配置

在app.jspn中将导航栏背景色和文字颜色进行修改

4. 效果图

四、云开发环境的配置

1. 新建cloud文件夹

在与pages同级的目录下新建cloud文件夹

2. 修改project.config.json配置

project.config.json中添加"cloudfunctionRoot": “/cloud”

更改后会发现cloud文件夹图标发生了变化

3.云开发环境初始化

在app.js中的onLaunch函数中进行初始化,如下:

五、获取用户唯一的_openid

1. 新建云函数


2. 调用云函数

为了让所有页面均可获得用户openid,我们在app.js中进行全局设置,代码如下:

// app.js
App({
  onLaunch() {
    wx.cloud.init({
      //云开发环境id
      env: 'xzy-cloud-6gucjazc6ba57719'  
    }),

    //调用云函数
    wx.cloud.callFunction({
      name: 'get_openId',
      success: res => {
        //获取用户openid
        this.globalData.user_openid = res.result.openid
        console.log(this.globalData.user_openid)
      }
    })
  },
  //全局数据
  globalData: {
    //用户openid
    user_openid: '',
    //用户信息
    userInfo: null
  }
})

六、将用户信息加入数据库

1. 建表


2. 获取用户信息

  • Step1:为button按钮绑定事件
    在my页面中添加绑定事件
<button class="btn-login" bindtap="login">一键登录</button>
  • Step2:编写绑定事件函数
    在my.js中,与data平级下编写事件函数
data: {
    userInfo: null
  },

login() {
    wx.getUserProfile({
      desc: '获取用户信息',
      success: res => {
        console.log(res.userInfo)
        //设置全局用户信息
        app.globalData.userInfo = res.userInfo
        //设置局部用户信息
        this.setData({
          userInfo: res.userInfo
        })
      }
    })
  },

注意:全局设置用户信息前需在my.js中与Page平级下添加如下代码:

const app = getApp()

点击按钮获取的用户信息如下:

3. 用户信息不全说明

由上图可以看出用户信息中城市,国家等一些信息为空,这是因为官方对这个接口做出的调整,如下所示:

可参考官方调整公告

4. 其它页面获取用户信息

这里以首页为例,首先在home.js中与Page平级下添加如下代码:

const app = getApp()

然后在home.js中的onshow函数中打印用户信息

5. 将用户信息加入数据库

在my.js的login事件函数中继续编写信息加入数据库的代码,如下所示:

 login() {
    wx.getUserProfile({
      desc: '获取用户信息',
      success: res => {
        console.log(res.userInfo)
        var user = res.userInfo
        //设置全局用户信息
        app.globalData.userInfo = user
        //设置局部用户信息
        this.setData({
          userInfo: user
        })

        //将数据添加到数据库
        wx.cloud.database().collection('userInfo').add({
          data: {
            avatarUrl: user.avatarUrl,
            nickName: user.nickName
          },
          success: res => {
            console.log(res)
          }
        })
      }
    })
  },

点击按钮授权登录后,可以查看数据库

6. 解决用户重复添加问题

由于每次登录时都会执行add命令,每执行一次就会往数据库里增加一条数据,因此需要避免重复执行add指令,更改my.js中的login函数,更改如下:

  login() {
    wx.getUserProfile({
      desc: '获取用户信息',
      success: res => {
        // console.log(res.userInfo)
        var user = res.userInfo
        //设置全局用户信息
        app.globalData.userInfo = user
        //设置局部用户信息
        this.setData({
          userInfo: user
        })

        //检查之前是否已经授权登录
        wx.cloud.database().collection('userInfo').where({
          _openid: app.globalData.user_openid
        }).get({
          success: res => {
            //原先没有添加,这里添加
            if (!res.data[0]) {
              //将数据添加到数据库
              wx.cloud.database().collection('userInfo').add({
                data: {
                  avatarUrl: user.avatarUrl,
                  nickName: user.nickName
                },
                success: res => {
                  wx.showToast({
                    title: '登录成功',
                    icon: 'none'
                  })
                }
              })
            } else {
              //已经添加过了
              this.setData({
                userInfo: res.data[0]
              })
            }
          }
        })
      }
    })
  },

七、自动登录并展示用户信息

1. 查找并保存用户信息

首先在app.js的onLaunch函数中查找用户是否已经登录过了,若已经登录过,则查找用户信息并保存,app.js代码如下:

// app.js
App({
  onLaunch() {
    wx.cloud.init({
      //云开发环境id
      env: 'xzy-cloud-6gucjazc6ba57719'  
    }),

    //调用云函数
    wx.cloud.callFunction({
      name: 'get_openId',
      success: res => {
        //获取用户openid
        this.globalData.user_openid = res.result.openid
        // console.log(this.globalData.user_openid)

        //在数据库中查找用户是否已经登录过了
        wx.cloud.database().collection('userInfo').where({
          _openid: res.result.openid
        }).get({
          success: result => {
            this.globalData.userInfo = result.data[0]
          }
        })
      }
    })
  },
  //全局数据
  globalData: {
    //用户openid
    user_openid: '',
    //用户信息
    userInfo: null
  }
})

然后将用户信息存储到my.js中,存储如下:

onLoad: function (options) {
    this.setData({
      userInfo: app.globalData.userInfo
    })
  },

2. 编译模式的更改

将编译模式改为普通编译模式

3. 展示用户信息

my.wxml页面结构如下:

<block wx:if="{{!userInfo}}">
  <!-- 登录区域 -->
  <view class="login-container">
    <image src="/images/contact-filled.png" class="contact-filled" mode="widthFix"></image>
    <button class="btn-login" bindtap="login">一键登录</button>
    <text class="tip-text">登录后尽享更多权益</text>
  </view>
</block>

<block wx:else>

  <!-- 头像昵称区域 -->
  <view class="top-box">
    <image src="{{userInfo.avatarUrl}}" class="avatar"></image>
    <view class="nickname">{{userInfo.nickName}}</view>
  </view>

  <!-- 面板区域 -->
  <view class="panel">
    <view class="panel-list-item">
      <text>联系客服</text>
      <image src="/images/arrow.png"></image>
    </view>

    <view class="panel-list-item">
      <text>设置</text>
      <image src="/images/arrow.png"></image>
    </view>

    <view class="panel-list-item" bindtap="logout">
      <text>退出登录</text>
      <image src="/images/arrow.png"></image>
    </view>
  </view>

</block>

my.wxss样式如下:

page {
  background-color: #f8f8f8;
}

.login-container {
  height: 900rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  overflow: hidden;
}

/* 图标的样式 */
.contact-filled {
  width: 150rpx;
  margin-bottom: 16rpx;
}

/* 登录按钮的样式 */
.btn-login {
  width: 90%;
  border-radius: 100px;
  margin: 15px 0;
  background-color: #c00000;
  color: #f8f8f8;
}

/* 按钮下方提示消息的样式 */
.tips-text {
  font-size: 12px;
  color: gray;
}

/* 用户信息样式 */
.top-box {
  height: 400rpx;
  background-color: #c00000;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;

}

/* 用户头像样式 */
.top-box .avatar {
  display: block;
  width: 90px;
  height: 90px;
  border-radius: 45px;
  border: 2px solid white;
  box-shadow: 0 1px 5px black;
}

/* 用户昵称样式 */
.top-box .nickname {
  color: white;
  font-weight: bold;
  font-size: 16px;
  margin-top: 10px;
}

/* 面板样式设置 */
.panel {
  background-color: white;
  border-radius: 3px;
}

.panel-list-item {
  height: 45px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 15px;
  padding: 0 10px;
}

/* 箭头样式 */
.panel-list-item image {
  width: 60rpx;
  height: 60rpx;
}

八、退出登录

为退出登录绑定事件logout,并在my.js中编写相应的事件函数

九、效果图


有关微信小程序云开发授权登录的简易制作的更多相关文章

  1. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  2. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  3. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  6. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  7. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

    我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

  8. ruby-on-rails - 访问授权和访问 token 之间的区别 - 2

    Doorkeeper中Token和Grant的区别我搞不清楚。Doorkeeper在哪个时刻创建访问授权,何时创建访问token?文档似乎对此什么也没说,现在我正在阅读代码,但不是十几行。 最佳答案 我还建议阅读documentationofoauth2据我了解,Doorkeeper也是基于该文档中描述的协议(protocol)。在doorkeeper中,你会先获得accessgrant,然后是accesstoken。访问授权通常只存在很短的时间(doorkeeper中的默认值为10分钟)。您将通过向api-url/oauth/au

  9. Ubuntu20.04系统WineHQ7.0安装微信 - 2

    提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信

  10. 微信小程序订餐系统 - 2

    对传统的餐饮商家来说,小程序很好地解决了餐厅线下线上连接的问题,在引流获客、节约人力、营销宣传、塑造会员体系、改善消费体验等方面都有很大帮助。小程序点餐可以帮助餐饮企业节省一大把人力开支。一个包含扫码点单、菜品管理、优惠券推送、外卖配送的小程序,商家花几万元就能完成开发测试并投入。商家为什么要开通“扫码点餐”1.解决服务员不够用的问题。2.不怕顾客跑单漏单。3.在微信就能管理菜品、查看营业额。4.订单小票显示顾客桌号和已点菜品。5.可在“附近的小程序”找到您的门店。如今餐饮业常用的三种经营模式:1堂食点单模式客人通过小程序堂食点单。商家可以在微信扫码点餐小程序管理后台根据自己店内情况来设置不同

随机推荐