微信小程序中登录流程示例
wx.login(Object object)
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见 小程序登录。
属性 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
---|---|---|---|---|---|
timeout | number | 否 | 超时时间,单位ms | 1.9.90 | |
success | function | 否 | 接口调用成功的回调函数 | ||
fail | function | 否 | 接口调用失败的回调函数 | ||
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
示例
<!--pages/01login/01login.wxml-->
<button bindtap="_login">登录</button>
// pages/01login/01login.js
Page({
// 同步方法 Promise
loginSync(){
return new Promise((resolve,reject)=>{
wx.login({
success:resolve,
fail:reject
})
});
},
requestSync(url,data={}){
return new Promise((resolve,reject)=>{
wx.request({
url,
data,
success:resolve,
fail:reject
})
})
},
async _login(){
// 1 获取临时的code wx.login 异步方法
// wx.login({
// success(res){
// console.log(res)//res.code
// }
// })
try{
// 1开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openid 和 session_key 等信息
let loginRes = await this.loginSync();
console.log(loginRes,'ok');
let code = loginRes.code;
// 2发起请求
let requestRes = await this.requestSync('http://127.0.0.1:3000/login',{code});
// console.log(requestRes.data.openid)
// 3存储用户身份标识 是唯一的
wx.setStorageSync('openid', requestRes.data.openid);
}catch(err){
console.log(err,'err')
}
}
})
判断用户是否登录
// pages/02order/02order.js
Page({
onLoad(){
// 可以将验证用户是否登录,可以将其写在app.js中 验证一次即可
wx.checkSession({
success () {
//session_key 未过期,并且在本生命周期一直有效
console.log("登录状态有效")
},
fail (err) {
// session_key 已经失效,需要重新执行登录流程
console.log(err,"没有登录...")
wx.showToast({
title: '未登录',
success(){
wx.navigateTo({
url: '/pages/01login/01login',
})
}
})
}
})
}
})
后端api接口
const express = require('express')
//got模块,相当于前台的ajax功能
const got = require('got')
//创建一个应用
const app = express()
//匹配GET请求路径设置回调函数
app.get('/login',(req,res)=>{
// req.query.code
const js_code = req.query.code //这是小程序进行登录临时的code 5分钟
//console.log(js_code,33333)
//3 . auth.code2session接口,进行解密code。获取此小程序用户的id
//https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
const appid = '个人appid'
const secret = '个人小程序密钥' //此小程序appid的密钥 从小程序后台 。
const code2sessionUrl = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${js_code}&grant_type=authorization_code`;
//res.send( code2sessionUrl )
;(async () => {
try {
const response = await got( code2sessionUrl );//发送got请求
//console.log(typeof response.body,response.body);
let result = JSON.parse( response.body )
res.send({
openid:result.openid + 'woshiyigesuozi',
msg:"请求成功"
})// openid session_key(解密敏感数据)
} catch (error) {
//console.log(error.response.body);
//=> 'Internal server error ...'
res.send(error.response.body)
}
})()
})
app.get('/checklogin',(req,res)=>{
//req.query.openid + 'woshiyigesuozi'
})
//监听端口
app.listen(3000,()=>{
console.log('port',3000)
})
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17634596.html