微信小程序登录界面的代码html,微信小程序用户登录组件
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,微信小程序用户登录组件相关推荐
- html 登录界面js代码,详解JS实现系统登录页的登录和验证
这篇文章用JS显示表单的登录以及验证和对键盘的监听,这里有两种方法,一种是无需用户验证直接登录,一种是需要账户密码匹配才可登录. 1. html代码 登 录 2.CSS样式 .content{ pad ...
- 用python写注册登录界面web_用Python实现web端用户登录和注册功能
这篇文章主要介绍了用Python实现web端用户登录和注册功能的教程,需要的朋友可以参考下 用户管理是绝大部分Web网站都需要解决的问题.用户管理涉及到用户注册和登录. 用户注册相对简单,我们可以先通 ...
- html登录界面设计代码_最简洁实现Github登录的JS代码示例
本文源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github 大纲 概述 实现思路分析 在Github官网 ...
- 初次入坑解析的小程序(决定写代码风格的小程序)
初次入坑解析的小程序(决定写代码风格的小程序) 我是一个大二的学生,在接触小程序之前我是一个学计算机运维的,后来入了坑,在入坑以后开发了两个小程序. 第一个是为学校开发的一个考勤的小程序,样式是别人设 ...
- 西门子1200PLC程序SCL数控G代码功能块源文件 S7-1200PLC程序SCL数控G代码功能块源文件
西门子1200PLC程序SCL数控G代码功能块源文件 S7-1200PLC程序SCL数控G代码功能块源文件 实际项目拆分出封装好的的功能块,保证好用 整个G代码解析的程序做成了一个FB功能块,总共约1 ...
- 微信登录界面安卓代码_「微信多开神器」一键安排你的所有微信
很多人都有两个微信号,一个用于工作,和同事老板打交道.一个用于生活,时不常发发牢骚. 现在的安卓手机上大多自带微信双开的功能,很方便.但电脑上如何同时登陆两个微信呢? 一.使用bat文件,无限制多开微 ...
- 微信登录界面安卓代码_【雷电说明书】安卓模拟器微信登录闪退,转圈,停止运行解决方法...
雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...
- 微信登录界面安卓代码_安卓模拟器微信登录闪退,转圈,停止运行解决方法
雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...
- api 定位 微信小程序 精度_一行代码区分微信小程序或QQ小程序
背景 很多开发者发现微信小程序的代码作为QQ小程序也能运行,可谓是无缝移植,这点为腾讯开发团队点赞. 但是QQ和微信小程序之间的服务端API有所不同,由此产生了一个需求:判断小程序当前是运行在微信还是 ...
- python计算器小程序源码_python代码编写计算器小程序
本文实例为大家分享了python计算器小程序的具体代码,供大家参考,具体内容如下 import tkinter import tkinter.messagebox import math class ...
最新文章
- Nature:要想真正研究宿主-肠道微生物的相互作用,必须将相对定量变成绝对定量...
- java中记忆深刻的问题_工作中碰到比较印象深刻的问题(面试必问)
- 主线程和子线程的同步控制
- Nginx添加ngx_http_headers_module模块
- CSS :before :after 伪类选择器
- 安卓学习笔记09:常用布局 - 帧式布局
- bootstrap基础样式学习(二)——栅格
- 理清javascript的相关概念 DOM和BOM
- 二调,分幅图打印(标准分幅土地利用现状图,耕地坡度分级图),图框工具
- C语言也能干大事第十四节(如鹏基础)
- MTK 11A MAINMENU
- 编译安装Vue-devtools
- mysql 1032_[MySQL] SQL_ERROR 1032解决办法
- ffmpeg 视频提取音频 php-ffmpeg
- Java 拆分PDF文档
- libcmt.lib和libcmtd.lib链接库冲突错误的解决方案
- 程序员职业如何选择?从榜样雷军谈起
- 怎么输入文字自动配音?手把手教会你,仅需三个步骤
- jedis连接redis失败解决
- emWin默认皮肤下重新设置颜色
热门文章
- cacti 文件服务器,免费的服务器和网络监控工具-CactiEZ
- 17、Java——汽车租赁系统(对象+数组)
- 自动驾驶——为什么需要仿真?
- 高校邦HTML5,高校邦视频自动播放器
- canbus是什么意思_canbus.是什么意思
- 哈夫曼编码c语言例题,关于哈夫曼编码试题的计算
- 用波尔理论推导里德伯公式
- mysql数据库置疑,sqlserver2000数据库置疑的解决方法
- 【JDBC】使用IDEA连接数据库,执行增删改操作。
- 小爱同学app安卓版_小爱同学手机版安卓下载_小爱同学app下载 v2.7.43 - 87G手游网...