Initial commit
This commit is contained in:
131
wechat-mini-program/pages/login/login.js
Normal file
131
wechat-mini-program/pages/login/login.js
Normal file
@@ -0,0 +1,131 @@
|
||||
const app = getApp()
|
||||
const { request } = require('../../utils/request')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
hasUserInfo: false,
|
||||
hasPhone: false
|
||||
},
|
||||
onLoad() {
|
||||
this.checkStatus();
|
||||
},
|
||||
checkStatus() {
|
||||
// If the user is already here, we check if they are valid.
|
||||
// However, app.js handles the redirection for existing users.
|
||||
// If we are here, it means either app.js sent us here (New User),
|
||||
// or app.js hasn't finished checking yet,
|
||||
// or the user manually navigated here (unlikely).
|
||||
|
||||
const user = app.globalData.userInfo;
|
||||
if (user) {
|
||||
// We can't rely on is_new_user here because we don't persist it in globalData (though we could).
|
||||
// But based on new logic:
|
||||
// If user exists, app.js wouldn't redirect here.
|
||||
// If we are here, user probably needs to authorize.
|
||||
|
||||
// Update UI state
|
||||
const hasNick = user.wechat_nickname && user.wechat_nickname !== '微信用户';
|
||||
const hasPhone = !!user.phone;
|
||||
|
||||
this.setData({
|
||||
hasUserInfo: hasNick,
|
||||
hasPhone: hasPhone
|
||||
})
|
||||
|
||||
// If somehow we ended up here but profile is full, go home
|
||||
if (hasNick && hasPhone) {
|
||||
wx.switchTab({ url: '/pages/index/index' })
|
||||
}
|
||||
} else {
|
||||
// Wait for app.js login callback
|
||||
app.loginCallback = (user) => {
|
||||
// Re-run check
|
||||
this.checkStatus();
|
||||
// If app.js determines it's an existing user, it might redirect.
|
||||
// But if not, we update UI here.
|
||||
}
|
||||
}
|
||||
},
|
||||
getUserProfile(e) {
|
||||
wx.getUserProfile({
|
||||
desc: '用于完善会员资料',
|
||||
success: (res) => {
|
||||
const { userInfo } = res
|
||||
console.log('getUserProfile success', userInfo)
|
||||
|
||||
// Update backend
|
||||
// We need user ID from globalData
|
||||
if (app.globalData.userInfo && app.globalData.userInfo.id) {
|
||||
this.updateUserInfo(userInfo)
|
||||
} else {
|
||||
// Should not happen if app.js login succeeded
|
||||
wx.showToast({ title: '登录状态异常,请重启', icon: 'none' })
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('getUserProfile failed', err)
|
||||
wx.showToast({ title: '需要授权才能继续', icon: 'none' })
|
||||
}
|
||||
})
|
||||
},
|
||||
updateUserInfo(wxUserInfo) {
|
||||
request({
|
||||
url: `/students/${app.globalData.userInfo.id}/`,
|
||||
method: 'PATCH',
|
||||
data: {
|
||||
wechat_nickname: wxUserInfo.nickName,
|
||||
avatar: wxUserInfo.avatarUrl
|
||||
// name: wxUserInfo.nickName // Optional: sync name too
|
||||
}
|
||||
}).then(res => {
|
||||
console.log('Update user info success', res)
|
||||
app.globalData.userInfo = { ...app.globalData.userInfo, ...res }
|
||||
this.setData({ hasUserInfo: true })
|
||||
}).catch(err => {
|
||||
console.error('Update user info failed', err)
|
||||
wx.showToast({ title: '更新资料失败', icon: 'none' })
|
||||
})
|
||||
},
|
||||
getPhoneNumber(e) {
|
||||
console.log('getPhoneNumber', e)
|
||||
if (e.detail.errMsg === 'getPhoneNumber:ok') {
|
||||
request({
|
||||
url: '/user/phone/',
|
||||
method: 'POST',
|
||||
data: {
|
||||
code: e.detail.code
|
||||
}
|
||||
}).then(res => {
|
||||
console.log('Get phone success', res)
|
||||
if (res.phone) {
|
||||
this.setData({ hasPhone: true })
|
||||
if (app.globalData.userInfo) {
|
||||
app.globalData.userInfo.phone = res.phone
|
||||
}
|
||||
|
||||
wx.showToast({
|
||||
title: '登录成功',
|
||||
icon: 'success'
|
||||
})
|
||||
|
||||
// Redirect to home
|
||||
setTimeout(() => {
|
||||
wx.switchTab({ url: '/pages/index/index' })
|
||||
}, 1500)
|
||||
}
|
||||
}).catch(err => {
|
||||
console.error('Get phone failed', err)
|
||||
wx.showToast({ title: '获取手机号失败', icon: 'none' })
|
||||
})
|
||||
} else {
|
||||
console.log('User denied phone number')
|
||||
// If user denies, we can optionally let them in anyway if that's the requirement?
|
||||
// User said: "If openID exists, direct login".
|
||||
// This implies for NEW users, they MIGHT need to authorize phone.
|
||||
// But strictly speaking, once they authorized UserProfile (Avatar/Nick),
|
||||
// the OpenID exists.
|
||||
// But the "User Phone" part is usually critical.
|
||||
// Let's keep strict requirement for phone for NEW users for now unless asked otherwise.
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user