user.js
2.2 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
* Created by Tommy Huang on 18/03/21.
*/
const config = require('config-lite')({
config_basedir: __dirname,
config_dir: 'config'
})
const axios = require('axios')
const Helper = require('./helper')
const User = require('../models').User
exports.get = async function(req, res) {
try {
const code = req.query.code
let userId, user, token, info, refreshToken
if (req.session.userId) {
userId = req.session.userId
}
console.log('userId:', userId)
if (userId) {
user = await User.findOne({
where: {id: userId}
})
}
if (user && user.refreshToken) {
let tokenResult = await Helper.refreshUserWxToken(user.refreshToken)
if (!tokenResult) throw new Error('刷新微信授权失败')
userId = user.id
token = tokenResult.access_token
refreshToken = user.refreshToken
} else if (code) {
let ticketResult = await Helper.getUserWxAccessTokenInfo(code)
if (!ticketResult) throw new Error('获取微信授权失败')
userId = ticketResult.openid
token = ticketResult.access_token
refreshToken = ticketResult.refresh_token
} else {
throw new Error('非法参数')
}
info = await Helper.getUserWxInfo(token, userId)
if (!info) throw new Error('拉取微信信息失败')
if (!user) {
user = await User.findOne({
where: {id: info.openid}
})
}
if (user) {
await user.update({
username: info.nickname,
headimgurl: info.headimgurl,
refreshToken: refreshToken
})
} else {
user = await User.create({
id: info.openid,
username: info.nickname,
headimgurl: info.headimgurl,
refreshToken: refreshToken
})
}
req.session.userId = user.id
res.json({
success: 1,
user: {
id: user.id,
username: info.nickname,
headimgurl: info.headimgurl,
phone: user.phone || '',
needPhoneBind: user.phone ? false : true,
needIdBind: (user.name && user.idNo) ? false : true
}
})
} catch (e) {
console.log(e)
res.json({
success: 0,
redirect: config.entryURL,
msg: `获取用户信息失败:${e.message}`
})
}
}