小程序如何登录授权

如何登录授权

登录的时候获取用户的token
什么token?
用户权限标识 前端鉴权的一种方式 (可认为是一把钥匙) 后端生成 有时效性
token的传递顺序
前端 > 后台 > 服务器 > 流程
在这里插入图片描述

登陆的时候检测是否注册 没注册先注册(写入后台数据)
参考文档:
官方文档

完整的登录注册代码

(1)点击封装的登录模块中的按钮—执行processLogin方法
processLogin代码如下:
processLogin(e) {
//如果没有用户userInfo
if (!e.detail.userInfo) {
wx.showToast({
title: ‘已取消’,
icon: ‘none’,
})
return;
}
//如果用userInfo,则调用register注册方法
AUTH.register(this);
}

(2)register方法
注册时参考接口文档:https://api.it120.cc/doc.html#

async function register(page) {
let _this = this;
wx.login({
success: function (res) {
let code = res.code; // 微信登录接口返回的 code 参数,下面注册接口需要用到
//微信小程序内置获取用户信息的api方法
wx.getUserInfo({
success: function (res) {
console.log(‘getUserInfo::::::’,res)
let iv = res.iv; //加密值
let encryptedData = res.encryptedData; //包括敏感数据在内的完整用户信息的加密数据
let referrer = ‘’ // 推荐人
let referrer_storge = wx.getStorageSync(‘referrer’);
if (referrer_storge) {
referrer = referrer_storge;
}
// 下面开始调用注册接口,用咱们封装调用接口方法去注册
WXAPI.register_complex({
code: code,
encryptedData: encryptedData,
iv: iv,
referrer: referrer
}).then(function (res) {
console.log(‘登录注册成功状态:’,res)
_this.login(page);
})3)执行登录login方法

async function login(page){
const _this = this
wx.login({
success: function (res) {
WXAPI.login_wx(res.code).then(function (res) {
console.log(‘登录成功后返回结果::::::’,res)
if (res.code == 10000) {
// 去注册
//_this.register(page)
return;
}
if (res.code != 0) {
// 登录错误
wx.showModal({
title: ‘无法登录’,
content: res.msg,
showCancel: false
})
return;
}

//登录成功将后端返回的token和uid存储到本地缓存中
wx.setStorageSync(‘token’, res.data.token)
wx.setStorageSync(‘uid’, res.data.uid)

//如果有page,则重新刷新page对应的页面,或用wx.navigaterTo()
if ( page ) {
page.onShow()
}
})
}
})
}

//下面两个方法主要用于检测登录态和token是否过期

1.只检测登录态(检测微信返回)
async function checkSession(){
return new Promise((resolve, reject) => {
wx.checkSession({
success() {
return resolve(true)
},
fail() {
return resolve(false)
}
})
})
}

// 总体检测登录状态,包括token和微信登录态 返回 true 或false
async function checkHasLogined() {
//获取本地存储的token
const token = wx.getStorageSync(‘token’)
//如果没有token,直接返回false
if (!token) {
return false
}

//检测微信登录态
/**

调用成功说明当前 session_key 未过期,调用失败说明 session_key 已过期
*/
const loggined = await checkSession()
//如果没有登录态,则移除token,并返回false
if (!loggined) {
wx.removeStorageSync(‘token’)
return false
}

//检测登录token是否有效
const checkTokenRes = await WXAPI.checkToken(token)

//如果登录token无效,移除token并返回false
if (checkTokenRes.code != 0) {
wx.removeStorageSync(‘token’)
return false
}

//如果有token并且有效,并且微信登录态也有效则返回true
return true
}

API工厂封装的数据请求接口说明文档:
https://github.com/gooking/apifm-wxapi/blob/master/instructions.md

API工厂封装的数据请求源码地址:
https://github.com/gooking/apifm-wxapi/blob/dbc6981600737fd3bc5624bc2399f84b609faad4/src/index.js#

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值