Initial commit
This commit is contained in:
84
wechat-mini-program/app.js
Normal file
84
wechat-mini-program/app.js
Normal file
@@ -0,0 +1,84 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user