I 效果:每个需要判断登录的页面只需引入该组件,即可知道显示登录按钮还是页面信息。

注意:这里不是登录页面,只是写的一个按钮组件,通过判断显示和隐藏按钮。

流程图如下

image.png

效果图如下

image.png

登录过程

html代码

小程序授权登录主要通过button按钮绑定bindgetuserinfo方法实现。我们这边把登录按钮封装成了组件,所以通过isShowLogin变量控制按钮显示隐藏。

使用微信授权登录

css代码

.login-box {

position: fixed;

top: 0;

bottom: 0;

left: 0;

right: 0;

z-index: 9999;

background: white;

display: flex;

flex-direction: column;

justify-content: center;

}

.login-btn {

text-align: center;

font-size: 0.875rem;

width: 90%;

border-radius: 20rpx;

height: 100rpx;

line-height: 100rpx;

background: #fcea5e;

color: black;

margin-bottom: 50rpx;

}

.login-btn::after {

border: none !important;

}

js代码

组件data中定义显示、隐藏组件的变量

data: {

isShowLogin: false

},

在自定义组件的attached(这里注意不要使用created,在created中访问不到setData)生命周期函数中判断用户当前是否是登录状态,如果是未登录状态,则调用wx.longin({})方法,在成功的回调中请求获取sessionkey的接口。

sessionkey的接口返回的是用户信息,则此用户为小程序的老用户,直接获取即将跳转的页面重定向到此页面;

sessionkey的接口返回的是sessionkey的值,则继续请求微信登录的接口。

import LOGIN_BUTTON from '../../utils/login'

import LOGIN from '../../models/login'

import getPage from '../../utils/getPage'

attached() {

let user = wx.getStorageSync('user')

if (!user || !user.id) {

this.setData({ isShowLogin: true })

wx.setNavigationBarTitle({ title: '登录' })

wx.login({

success: e => {

let code = e.code

// LOGIN()是封装的请求接口的方法

LOGIN().fetchSessionkey({ code: code }).then(res => {

if (res.error == 0) {

if (res.data.id) {

wx.setStorageSync('user', res.data) // 将用户信息存储到缓存中

wx.setStorageSync('cookiekey', res.data.cookiekey)

getPage() // 重定向到用户想进入的页面,后面贴出代码

}

}

})

}

})

}

},

methods: {

getUserInfoTap(res) {

if (!res.detail.encryptedData || !res.detail.iv) return // 如果用户点击了拒绝授权

let params = {

encryptedData: res.detail.encryptedData,

iv: res.detail.iv

}

LOGIN_BUTTON(params) // 因为判断登录的部分我们要复用,所以我这边写了个公用方法,将所需两个参数传进方法里即可(使用方法要引入哦!!)

}

}

LOGIN_BUTTON判断登录的方法

import LOGIN from '../models/login'

import getPage from '../utils/getPage'

export default function LOGIN_BUTTON(params) {

const data = {...params} // 接收传进的两个参数

wx.login({

success: e => {

let code = e.code

LOGIN().fetchSessionkey({ code: code }).then(res => { // 请求获取sessionkey方法(LOGIN()是封装好的类中的fetchSessionkey方法)

if (res.error == 0) {

if (res.data.id) {

data.cb&&data.cb() // 若获取到的是用户信息,则为老用户,直接授权登录,不需给用户展示登录按钮

} else {

let params = {

...data,

sessionkey : res.data.sessionkey

}

wx.login({

success: e => {

LOGIN().fetchWxLogin(params).then(res => { // 请求微信登录的接口

if (res.error == 0) {

wx.setStorageSync('user', res.data)

wx.setStorageSync('cookiekey', res.data.cookiekey)

getPage() // 重定向到当前页

}

})

},

fail: e => {

wx.showToast({

title: '登录失败,请重新登录',

icon: 'none'

})

}

})

}

} else {

wx.showToast({

title: res.msg,

icon: 'none'

})

}

}).catch( err => {

wx.showToast({

title: err,

icon: 'none'

})

})

}

})

}

重定向页面的方法

export default function getPage() {

let pages = getCurrentPages()

let curPage = pages[pages.length - 1]

let url = `/${curPage.route}?`

for (let key in curPage.options) {

url += `${key}=${curPage.options[key]}&`

}

let tabRoutes = ['pages/my/my']

if (tabRoutes.includes(curPage.route)) {

wx.reLaunch({

url: '/pages/my/my',

})

} else {

wx.redirectTo(

{ url: url.substr(0, url.length - 1) }

)

}

}

登录状态还有失效的状态,即用户若是点击某一项操作按钮,接口返回失效状态码。

在app.js中定义一个全局变量,通过监听这个全局变量控制登录按钮显示与隐藏

globalData: {

userInfo: null,

loginFailure: false

},

loginFailureWatch (cb) {

var obj = this.globalData;

Object.defineProperty(obj, "loginFailure", {

configurable: true,

enumerable: true,

set (value) {

if (cb) cb(value);

}

})

}

在请求里将全局变量的值变为true

if (res.data.error == '9998') {

getApp().globalData.loginFailure = true

}

在自定义组件中attached方法中,改变显示按钮的变量值

getApp().loginFailureWatch(val => {

if (val) this.setData({ isShowLogin: true })

})

以上就是整个微信小程序登录组件啦!

-0

微信小程序登录界面的代码html,微信小程序用户登录组件相关推荐

  1. html 登录界面js代码,详解JS实现系统登录页的登录和验证

    这篇文章用JS显示表单的登录以及验证和对键盘的监听,这里有两种方法,一种是无需用户验证直接登录,一种是需要账户密码匹配才可登录. 1. html代码 登 录 2.CSS样式 .content{ pad ...

  2. 用python写注册登录界面web_用Python实现web端用户登录和注册功能

    这篇文章主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下 用户管理是绝大部分Web网站都需要解决的问题.用户管理涉及到用户注册和登录. 用户注册相对简单,我们可以先通 ...

  3. html登录界面设计代码_最简洁实现Github登录的JS代码示例

    本文源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github 大纲 概述 实现思路分析 在Github官网 ...

  4. 初次入坑解析的小程序(决定写代码风格的小程序)

    初次入坑解析的小程序(决定写代码风格的小程序) 我是一个大二的学生,在接触小程序之前我是一个学计算机运维的,后来入了坑,在入坑以后开发了两个小程序. 第一个是为学校开发的一个考勤的小程序,样式是别人设 ...

  5. 西门子1200PLC程序SCL数控G代码功能块源文件 S7-1200PLC程序SCL数控G代码功能块源文件

    西门子1200PLC程序SCL数控G代码功能块源文件 S7-1200PLC程序SCL数控G代码功能块源文件 实际项目拆分出封装好的的功能块,保证好用 整个G代码解析的程序做成了一个FB功能块,总共约1 ...

  6. 微信登录界面安卓代码_「微信多开神器」一键安排你的所有微信

    很多人都有两个微信号,一个用于工作,和同事老板打交道.一个用于生活,时不常发发牢骚. 现在的安卓手机上大多自带微信双开的功能,很方便.但电脑上如何同时登陆两个微信呢? 一.使用bat文件,无限制多开微 ...

  7. 微信登录界面安卓代码_【雷电说明书】安卓模拟器微信登录闪退,转圈,停止运行解决方法...

    雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...

  8. 微信登录界面安卓代码_安卓模拟器微信登录闪退,转圈,停止运行解决方法

    雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...

  9. api 定位 微信小程序 精度_一行代码区分微信小程序或QQ小程序

    背景 很多开发者发现微信小程序的代码作为QQ小程序也能运行,可谓是无缝移植,这点为腾讯开发团队点赞. 但是QQ和微信小程序之间的服务端API有所不同,由此产生了一个需求:判断小程序当前是运行在微信还是 ...

  10. python计算器小程序源码_python代码编写计算器小程序

    本文实例为大家分享了python计算器小程序的具体代码,供大家参考,具体内容如下 import tkinter import tkinter.messagebox import math class ...

最新文章

  1. Nature:要想真正研究宿主-肠道微生物的相互作用,必须将相对定量变成绝对定量...
  2. java中记忆深刻的问题_工作中碰到比较印象深刻的问题(面试必问)
  3. 主线程和子线程的同步控制
  4. Nginx添加ngx_http_headers_module模块
  5. CSS :before :after 伪类选择器
  6. 安卓学习笔记09:常用布局 - 帧式布局
  7. bootstrap基础样式学习(二)——栅格
  8. 理清javascript的相关概念 DOM和BOM
  9. 二调,分幅图打印(标准分幅土地利用现状图,耕地坡度分级图),图框工具
  10. C语言也能干大事第十四节(如鹏基础)
  11. MTK 11A MAINMENU
  12. 编译安装Vue-devtools
  13. mysql 1032_[MySQL] SQL_ERROR 1032解决办法
  14. ffmpeg 视频提取音频 php-ffmpeg
  15. Java 拆分PDF文档
  16. libcmt.lib和libcmtd.lib链接库冲突错误的解决方案
  17. 程序员职业如何选择?从榜样雷军谈起
  18. 怎么输入文字自动配音?手把手教会你,仅需三个步骤
  19. jedis连接redis失败解决
  20. emWin默认皮肤下重新设置颜色

热门文章

  1. cacti 文件服务器,免费的服务器和网络监控工具-CactiEZ
  2. 17、Java——汽车租赁系统(对象+数组)
  3. 自动驾驶——为什么需要仿真?
  4. 高校邦HTML5,高校邦视频自动播放器
  5. canbus是什么意思_canbus.是什么意思
  6. 哈夫曼编码c语言例题,关于哈夫曼编码试题的计算
  7. 用波尔理论推导里德伯公式
  8. mysql数据库置疑,sqlserver2000数据库置疑的解决方法
  9. 【JDBC】使用IDEA连接数据库,执行增删改操作。
  10. 小爱同学app安卓版_小爱同学手机版安卓下载_小爱同学app下载 v2.7.43 - 87G手游网...