'use strict'; const uniID = require('uni-id') const uniCaptcha = require('uni-captcha') const db = uniCloud.database() const dbCmd = db.command let params,context,res; class User { async quickLogin(){ let {access_token,openid,type} = params switch (type){ case 'weixin': let userinfo_res = await uniCloud.httpclient.request('https://api.weixin.qq.com/sns/userinfo', { method: 'GET', dataType:"json", data:{ access_token,openid} }); return userinfo_res.data//根据access_token,openid得到userinfo //检查是否已经注册...待续... break; case 'univerify': return uniID.loginByUniverify({access_token,openid}) break; case 'apple': return await uniID.loginByApple(params) break; default: return {"code":100,"msg":"暂不提供"+type+"登陆的云端接口演示"} break; } } async sendSmsCode(){ // 简单限制一下客户端调用频率 const ipLimit = await db.collection('uni-verify').where({ ip: context.CLIENTIP, created_at: dbCmd.gt(Date.now() - 60000) }).get() if (ipLimit.data.length > 0) { return { code: 429, msg: '请求过于频繁' } } const templateId = '11753' // 替换为自己申请的模板id if (!templateId) { return { code: 500, msg: 'sendSmsCode需要传入自己的templateId,参考https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=sendsmscode' } } const randomStr = '00000' + Math.floor(Math.random() * 1000000) const code = randomStr.substring(randomStr.length - 6) return await uniID.sendSmsCode({ mobile: params.mobile, code, type: params.type, templateId }) } } const userClass = new User(); exports.main = async (event, ctx) => { [{params},context] = [event,ctx] //1.判断需要token的action是否有token /*let noCheckAction = ['register', 'loginByWeixin', 'checkToken','login', 'logout', 'sendSmsCode','loginBySms', 'inviteLogin', 'loginByUniverify','loginByApple', 'createCaptcha', 'verifyCaptcha','refreshCaptcha'] if(!noCheckAction.includes(event.action)) { if (!event.uniIdToken) { return {"code":403,"msg":"缺少token"} } let payload = {} payload = await uniID.checkToken(event.uniIdToken) if (payload.code && payload.code > 0) { return payload } params.uid = payload.uid }*/ try{ return await userClass[event.action]()||res; }catch(err){ return {"code":404,"msg":err} } }