官方流程
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | app.js(小程序的入口文件)的完整代码 const loginDataKey = 'loginData' //app.js App({ onLaunch: function () { const loginData = wx.getStorageSync(loginDataKey) console.log( '--loginData--' ) console.log(loginData) let toLogin = () => { console.log( '未登录,去登录..' ) wx.showLoading({title: '登录中' , icon: 'loading' , mask: true }) wx.login({ success(res){ console.log( 'wx.login res' ) console.log(res) let success = () => { console.log( '登录成功' ) let loginResponse = { "openid" : "ooZAbwpdDdaZV_xiamianshi_mashaike" } wx.setStorageSync(loginDataKey, loginResponse) wx.hideLoading() } let fail = () => { wx.hideLoading() wx.showToast({ title: '登录失败,请重新打开小程序试试' , icon: 'none' , duration: 1e8 }) } // TODO 发起网络请求 // 延时模拟请求登录成功 setTimeout(success, 500) }, fail(err){ console.log(err) wx.hideLoading() wx.showToast({ title: '登录失败,请重新打开小程序试试' , icon: 'none' , duration: 1e8 }) } }) } // 未登录,去登录 if (!loginData){ toLogin() // 已登录,但是微信session_key过期 } else { wx.checkSession({ success () { //session_key 未过期,并且在本生命周期一直有效 console.log( 'session_key 未过期' ) }, fail () { // session_key 已经失效,需要重新执行登录流程 console.log( 'session_key 已经失效,需要重新执行登录流程, 重新登录中' ) toLogin() } }) } }, globalData: { userInfo: null } }) |
流程如下
根据本地储存判断是否登录
已登录判断是否失效
失效或者未登录去登录
登录展示toast
拿到信息存储 关闭toast
核心
wx.login拿到code
然后把code通过 auth.code2Session 获取openid和unionid等。
这是我通过 auth.code2Session 拿到openid的截图(因为这个是测试号,所以没有unionid)
【unionid】是拿来和其他平台打通账号的关键,如果只有一个小程序,都可以不需要这个。
效果
其他
纯展示用户头像昵称等
1 2 | < open-data type = "useravatarurl" > < open-data type = "usernickname" ></ open-data type = "usernickname" ></ open-data type = "useravatarurl" > |