v0.0.4
This commit is contained in:
59
cloudfunctions/login/index.js
Normal file
59
cloudfunctions/login/index.js
Normal file
@@ -0,0 +1,59 @@
|
||||
const cloud = require('wx-server-sdk')
|
||||
|
||||
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
|
||||
const db = cloud.database()
|
||||
|
||||
// Generate a unique handle from openid
|
||||
function makeHandle(openid) {
|
||||
const suffix = openid.slice(-6).toLowerCase()
|
||||
return `@user_${suffix}`
|
||||
}
|
||||
|
||||
// Default avatar pool to randomise new user avatars
|
||||
const AVATAR_KEYS = [
|
||||
'gradient-avatar-1', 'gradient-avatar-2', 'gradient-avatar-3',
|
||||
'gradient-avatar-4', 'gradient-avatar-5', 'gradient-avatar-6'
|
||||
]
|
||||
|
||||
exports.main = async event => {
|
||||
const { OPENID } = cloud.getWXContext()
|
||||
if (!OPENID) throw new Error('no openid in wx context')
|
||||
|
||||
const now = Date.now()
|
||||
const existed = await db.collection('users').where({ openid: OPENID }).limit(1).get()
|
||||
|
||||
if (existed.data.length) {
|
||||
const user = existed.data[0]
|
||||
await db.collection('users').doc(user._id).update({
|
||||
data: { lastLoginAt: now }
|
||||
})
|
||||
return {
|
||||
openid: OPENID,
|
||||
user: { ...user, lastLoginAt: now },
|
||||
isNew: false
|
||||
}
|
||||
}
|
||||
|
||||
// New user — create with sensible defaults
|
||||
const avatarKey = AVATAR_KEYS[Math.floor(Math.random() * AVATAR_KEYS.length)]
|
||||
const user = {
|
||||
openid: OPENID,
|
||||
nickname: event.userInfo?.nickname || '宠物达人',
|
||||
handle: makeHandle(OPENID),
|
||||
avatarKey,
|
||||
avatarUrl: '',
|
||||
profileCompleted: false,
|
||||
location: '',
|
||||
yearsWithPets: 0,
|
||||
level: 1,
|
||||
bio: '',
|
||||
verified: false,
|
||||
stats: { posts: 0, following: 0, followers: 0, favorites: 0 },
|
||||
preferences: { notifications: true, nearbyVisible: true },
|
||||
createdAt: now,
|
||||
lastLoginAt: now
|
||||
}
|
||||
|
||||
const result = await db.collection('users').add({ data: user })
|
||||
return { openid: OPENID, user: { _id: result._id, ...user }, isNew: true }
|
||||
}
|
||||
Reference in New Issue
Block a user