Files
geminiWX/wechat-mini-program/app.js
2025-12-08 14:39:07 +08:00

85 lines
4.1 KiB
JavaScript

const env = require('./config/env')
App({
onLaunch() {
console.log('App Launch')
this.login();
},
globalData: {
userInfo: null,
baseUrl: env.baseUrl,
token: null
},
login() {
wx.login({
success: res => {
if (res.code) {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url: `${this.globalData.baseUrl}/auth/login/`,
method: 'POST',
data: {
code: res.code
},
success: (response) => {
// FitJSONRenderer wraps response in { code, data, msg }
const resBody = response.data;
if (response.statusCode === 200 && resBody.code >= 200 && resBody.code < 300) {
// Handle wrapped data
const payload = resBody.data || resBody;
const { token, user, is_new_user } = payload;
if (!token || !user) {
console.error('Login response missing token or user', payload);
return;
}
this.globalData.token = token;
this.globalData.userInfo = user;
// Logic:
// 1. If it's a new user (is_new_user=True), go to Login Page to authorize.
// 2. If it's an existing user (is_new_user=False), stay at Home (or redirect there if not).
// Note: We ignore whether they have phone/nickname if they are existing users, per user request "direct login".
if (is_new_user) {
wx.reLaunch({
url: '/pages/login/login'
})
} else {
// If we are currently on login page, go to home
// But onLaunch happens early. Usually we just don't redirect TO login.
// However, if the entry page WAS login (e.g. from share), we might want to go home.
// Or if the entry page is Home, we just stay there.
// Since we can't easily know "current page" in onLaunch without complex logic,
// and default entry is usually Home (pages/index/index), we just do nothing.
// BUT, if the app was configured to start at Login page in json, we might need to redirect.
// Let's assume default is index.
// If we are explicitly on login page (re-launched or shared), we should leave.
const pages = getCurrentPages()
if (pages.length > 0) {
const route = pages[pages.length - 1].route
if (route.includes('pages/login/login')) {
wx.switchTab({ url: '/pages/index/index' })
}
}
}
// 如果有页面需要监听登录状态,可以在这里触发回调
if (this.loginCallback) {
this.loginCallback(user);
}
} else {
console.log('登录失败!', resBody.msg || response.errMsg)
}
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
}
})