76 lines
1.7 KiB
JavaScript
76 lines
1.7 KiB
JavaScript
const requestUtil = require('./request')
|
|||
|
|
|
||
|
|
let pending = null
|
||
|
|
|
||
|
|
function deviceId() {
|
||
|
|
let id = wx.getStorageSync('deviceId')
|
||
|
|
if (!id) {
|
||
|
|
id = Date.now().toString(36) + Math.random().toString(36).slice(2, 8)
|
||
|
|
wx.setStorageSync('deviceId', id)
|
||
|
|
}
|
||
|
|
return id
|
||
|
|
}
|
||
|
|
|
||
|
|
function captureSharer(query) {
|
||
|
|
if (!query || !query.sharer) return
|
||
|
|
const selfId = wx.getStorageSync('openid')
|
||
|
|
if (query.sharer !== selfId) wx.setStorageSync('sharer', query.sharer)
|
||
|
|
}
|
||
|
|
|
||
|
|
function login() {
|
||
|
|
return new Promise((resolve, reject) => {
|
||
|
|
wx.login({
|
||
|
|
success(res) {
|
||
|
|
if (!res.code) {
|
||
|
|
reject(new Error('微信登录未返回 code'))
|
||
|
|
return
|
||
|
|
}
|
||
|
|
requestUtil
|
||
|
|
.request({
|
||
|
|
url: '/api/login',
|
||
|
|
method: 'POST',
|
||
|
|
data: { code: res.code, deviceId: deviceId() }
|
||
|
|
})
|
||
|
|
.then((data) => {
|
||
|
|
wx.setStorageSync('token', data.token)
|
||
|
|
wx.setStorageSync('openid', data.openid)
|
||
|
|
wx.setStorageSync('loginDemo', !!data.demo)
|
||
|
|
resolve(data)
|
||
|
|
})
|
||
|
|
.catch(reject)
|
||
|
|
},
|
||
|
|
fail() {
|
||
|
|
reject(new Error('微信登录失败'))
|
||
|
|
}
|
||
|
|
})
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
function ensureLogin() {
|
||
|
|
if (wx.getStorageSync('token')) {
|
||
|
|
return Promise.resolve({
|
||
|
|
token: wx.getStorageSync('token'),
|
||
|
|
openid: wx.getStorageSync('openid')
|
||
|
|
})
|
||
|
|
}
|
||
|
|
if (!pending) {
|
||
|
|
pending = login().finally(() => {
|
||
|
|
pending = null
|
||
|
|
})
|
||
|
|
}
|
||
|
|
return pending
|
||
|
|
}
|
||
|
|
|
||
|
|
function sourceSharer() {
|
||
|
|
const sharer = wx.getStorageSync('sharer') || ''
|
||
|
|
const openid = wx.getStorageSync('openid') || ''
|
||
|
|
if (!sharer || sharer === openid) return ''
|
||
|
|
return sharer
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
captureSharer: captureSharer,
|
||
|
|
ensureLogin: ensureLogin,
|
||
|
|
sourceSharer: sourceSharer
|
||
|
|
}
|