文章目录

  • 一、tabBar的配置
    • 1. 新建文件夹
    • 2. 新增tabBar节点
  • 二、添加编译模式
  • 三、登录页面的设计
    • 1. wxml结构
    • 2. wxss样式
    • 3. 导航栏样式配置
    • 4. 效果图
  • 四、云开发环境的配置
    • 1. 新建cloud文件夹
    • 2. 修改project.config.json配置
    • 3.云开发环境初始化
  • 五、获取用户唯一的_openid
    • 1. 新建云函数
    • 2. 调用云函数
  • 六、将用户信息加入数据库
    • 1. 建表
    • 2. 获取用户信息
    • 3. 用户信息不全说明
    • 4. 其它页面获取用户信息
    • 5. 将用户信息加入数据库
    • 6. 解决用户重复添加问题
  • 七、自动登录并展示用户信息
    • 1. 查找并保存用户信息
    • 2. 编译模式的更改
    • 3. 展示用户信息
  • 八、退出登录
  • 九、效果图

一、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({//云开发环境idenv: 'xzy-cloud-6gucjazc6ba57719'  }),//调用云函数wx.cloud.callFunction({name: 'get_openId',success: res => {//获取用户openidthis.globalData.user_openid = res.result.openidconsole.log(this.globalData.user_openid)}})},//全局数据globalData: {//用户openiduser_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({//云开发环境idenv: 'xzy-cloud-6gucjazc6ba57719'  }),//调用云函数wx.cloud.callFunction({name: 'get_openId',success: res => {//获取用户openidthis.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: {//用户openiduser_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. 微信小程序 云开发 欢迎登录注册

    提示:此文章相关代码在新版小程序上或许已经不可用!该小程序片段需要使用云函数,云函数具体内容参考github.需要使用云开发提供的数据库,相关的具体使用方法还请参考小程序云开发的相关最新文档.该部分代 ...

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

    文章目录 前言 一.前期的准备(很重要) 1.程序的需求 2.微信开发者文档 3.数据库的设计 二.小程序设计阶段 1.选择开发方式 2.云开发 第一步:注册微信小程序,获取小程序的 AppID 第二 ...

  3. 微信小程序云开发用户身份登录_你必须要掌握的微信小程序云开发

    微信小程序开发已经成为目前最火爆的技能之一,无论是在求职.毕设.兴趣培养等方面都已经成为一项必备技能,而小程序云开发技术的出现更是点燃了整个小程序生态圈. 在2019微信公开课PRO小程序分论坛上,腾 ...

  4. 微信小程序云开发已授权服务商开发,无法使用云服务

    微信小程序云开发已授权服务商开发,无法使用云服务错误解决方法 WASubContext.js?t=wechat&s=1648975635955&v=2.14.1:17 cloud in ...

  5. 微信小程序-云开发下的用户注册及用户登录逻辑

    文章目录 一.前言 二.思路分析 三.这样做的好处 1.安全性 2.便捷性 3.健壮性 四.实现代码 1.创建集合.配置权限 2.实现代码(app.js) 五.一些疑惑 六.结语 一.前言 基于微信小 ...

  6. 基于微信小程序云开发(校园许愿墙app)2.0稳定版,以发布上线

    大家好~我是c站的一个小博主,我会定期更新博文,本篇是围绕微信小程序基于腾讯云开发展开的一个项目,如果看着还不错,或者对您有帮助的话,可以进我的专栏看看我的小程序的其他作品https://blog.c ...

  7. 微信小程序云开发 · 从0搭建商业级校园跑腿平台(已开源)

    微信小程序云开发  ·  从零搭建商业级校园跑腿平台 小秃僧 新生代农民工,一枚准毕业的大四学生,热爱前端开发,做个有态度.有思想.有价值的公众号. 好久不更新了,再更新已是打工人! 我将分享用云开发 ...

  8. 微信小程序云开发及背后的云服务支持。

    文章目录 导语 什么是微信小程序云开发? 云开发的优势 云开发的技术生态支持 微信云开发主要能力特性 云数据库: 云函数: 云存储: 身份认证: 云调用: 云开发与传统开发的模式区别 小程序云开发带来 ...

  9. 垃圾分类微信小程序——云开发+CMS+微应用+百度智能云图片识别

    功能列表 1.0.0版本: 三个版本,一个APPID,登录页选择版本 登录,openid判断 社区居民用户注册,一房一主 工作/清洁人员账号绑定,一人一号,一号一人 用户首页,直接展示搜索功能,包括图 ...

  10. 头像总撞脸,如何定制化头像——微信小程序云开发

    前言 之前写了篇文章<头像总撞脸,如何定制化头像?几行Python代码实现人像动漫化>,里面提到用自己的真人照片通过阿里云API实现人物动漫化,生成一个独一无二对自己价值珍贵的头像.不过操 ...

最新文章

  1. 内存问题分析的利器——valgrind的memcheck
  2. 研究生实名举报深圳大学导师强迫学生延迟毕业,违规报销,各方回应
  3. springmvc学习笔记(10)-springmvc注解开发之商品改动功能
  4. 领扣-26/27/80/283 数组专题 做好初始定义 双指针 MD
  5. 浅析五种C语言内存分配的方法及区别
  6. jquery调用asp.net 页面后台的实现代码
  7. 8086汇编求一组正整数{0x1223,0x1234,0x1434,0x2345,0x3412,0x1712}中的最大数并存在变量MAX中
  8. VS2005中GridView簡單應用
  9. 随想录(uclibc的学习)
  10. 中国抗疲劳鞋类行业市场供需与战略研究报告
  11. x230键盘排线怎么拆_【HQP教程】记一次X230更换X220键盘
  12. 基于2018年世界杯赛事法国队夺冠进球数据分析
  13. php 操作 PSD,PHP中使用Imagick操作PSD文件实例
  14. Markdown 语法手册 (完整整理版)
  15. 大数据查询引擎 PrestoDB
  16. 高性能python软件开发_Python 最抢手、Java 最流行、Go 最有前途,7000 位程序员揭秘 2019 软件开发现状...
  17. ubuntu 打不开磁盘出错
  18. php页面静态化,ob缓存方法
  19. 面向对象的三大要素和五大原则
  20. 手机沙盒隔离软件_x8沙箱官网下载-X8沙箱(隔离运行双开助手)下载v0.6.8.8-cn 安卓版-西西软件下载...

热门文章

  1. 【c++】cout.setf(left)、cout.setf(right)详解
  2. 开源护眼工具LightBulb2.3.3汉化说明
  3. mybatis报错:Error evaluating expression
  4. 华为微认证华为云计算服务实践稳过 笔记资料
  5. mysql mtq_mysql高级复习 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
  6. 算法——重构字符串使得相邻字符不同
  7. python浪漫告白源代码_python七夕浪漫表白源码
  8. Composer 的常用命令
  9. HSL、RGB颜色转换
  10. 数据仓库指标体系搭建实战