基本重构完成
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
const AIChatSocket = require('./utils/chatmsg.js')
|
||||
const API = require('./utils/api.js')
|
||||
const request = require('./utils/request.js')
|
||||
|
||||
App({
|
||||
onLaunch() {
|
||||
// request 层遇到 code 401(token 已失效)时回调这里:静默重登后自动重试原请求。
|
||||
// 登录逻辑只在 app 里有一份,request 层不碰
|
||||
request.setUnauthorizedHandler(() => this.silentSignin())
|
||||
|
||||
let appId = wx.getStorageSync('attendant-appid')
|
||||
if (!appId) {
|
||||
appId = 'app_' + Date.now().toString(36) + Math.random().toString(36).substr(2, 9)
|
||||
@@ -63,39 +68,64 @@ App({
|
||||
this.checkUpdate();
|
||||
},
|
||||
|
||||
onShow(options) {
|
||||
const request = require('./utils/request.js')
|
||||
// 用户主动退出过就不再静默重登:wxsignin 只凭 code 换到 openid 就能重新
|
||||
// 签发 token(api/user/handler/users.js 的 wxSignin),不拦这一下,
|
||||
// 「我的」页的退出登录会被切后台/重进抵消。
|
||||
// 用户在「我的」页重新点登录并授权成功时会清掉这个标记
|
||||
onShow() {
|
||||
this.silentSignin()
|
||||
this.initChatSocket()
|
||||
},
|
||||
|
||||
// 静默重登:app.onShow 与 request 层的 401 兜底共用这一个入口
|
||||
// (wxsignin 只凭 code 换到 openid 就能签发 token,见 api/user/handler/users.js)。
|
||||
//
|
||||
// 单飞:并发只发一次——每次 wxsignin 都会重签 token 覆盖上一次,
|
||||
// 两个请求重叠时 DB 里存的是后保存的那个、而 globalData 存的是后返回的那个,
|
||||
// 一旦错位本机就拿着作废的 token,之后所有接口都 401。
|
||||
//
|
||||
// 用户主动退出过(has_logout)就不再静默重登,否则「我的」页的退出登录
|
||||
// 会被切后台/重进抵消;用户在「我的」页重新授权成功时会清掉这个标记
|
||||
silentSignin() {
|
||||
if (wx.getStorageSync('has_logout')) {
|
||||
this.initChatSocket()
|
||||
return
|
||||
return Promise.resolve(false)
|
||||
}
|
||||
wx.login({
|
||||
success: res => {
|
||||
if (res.code) {
|
||||
request.post('https://api.huashengtec.com/user/wxsignin', {
|
||||
if (this.signinPromise) {
|
||||
return this.signinPromise
|
||||
}
|
||||
|
||||
this.signinPromise = new Promise((resolve) => {
|
||||
wx.login({
|
||||
success: res => {
|
||||
if (!res.code) {
|
||||
console.log('登录失败!' + res.errMsg)
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
API.user.wxSignin({
|
||||
code: res.code
|
||||
})
|
||||
.then((data) => {
|
||||
if (data.code == 0) {
|
||||
this.globalData.user = data.data.user
|
||||
resolve(true)
|
||||
} else {
|
||||
console.log('error:', data)
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log('请求失败', err)
|
||||
resolve(false)
|
||||
})
|
||||
} else {
|
||||
console.log('登录失败!' + res.errMsg)
|
||||
},
|
||||
fail: (err) => {
|
||||
console.log('登录失败!' + err.errMsg)
|
||||
resolve(false)
|
||||
}
|
||||
}
|
||||
})
|
||||
}).then((ok) => {
|
||||
this.signinPromise = null
|
||||
return ok
|
||||
})
|
||||
|
||||
this.initChatSocket()
|
||||
return this.signinPromise
|
||||
},
|
||||
|
||||
initChatSocket() {
|
||||
|
||||
Reference in New Issue
Block a user