发布日期:2025-05-21 17:43 点击次数:152
在上一章,我们成功实现了用户通过授权手机号完成注册并开通会员的功能,并学会了如何在低代码平台中创建数据模型、编写云函数 API 以及进行前后端绑定。用户已经可以加入平台了。
本章,我们将在此基础上,实现当用户再次访问小程序时,能够自动识别其身份(登录),判断其是否已是平台的注册用户或会员,并根据其状态在页面上显示不同的内容。
1. 实现用户登录与状态判断
当用户打开小程序时,我们希望系统能够“认识”他,而不需要每次都手动输入账号密码(对于小程序来说,通常基于微信授权)。登录在这里更多地意味着身份的识别和用户状态的获取。
1.1 需求分析
核心需求是:
在小程序启动或进入特定页面时,自动检查用户身份。
判断当前微信用户(通过 openid 识别)是否已经在平台注册。
如果已注册,获取用户的基本信息和会员状态。
根据用户的注册/会员状态,在前端页面展示不同的内容(例如:显示用户头像昵称 vs. 显示“请注册/登录”按钮)。
(可选但推荐)提供退出登录的功能(虽然小程序通常不强制退出,但有助于切换账号或清除状态)。
1.2 后端逻辑:创建用户登录云函数 API
我们需要一个后端 API,接收前端的用户标识(openid),然后查询数据库,返回该用户在平台的状态和信息。
步骤 1:创建 API
在API列表,在用户管理分组下,添加一个新的 API 方法,命名为 getUserInfo 。
图片
图片
步骤 2:添加入参
这个 API 最重要的入参就是用户的唯一标识 openid。
图片
步骤 3:编写自定义代码
编写自定义代码,实现根据 openid 查询用户信息和会员信息的逻辑。
const ErrorCode = { SUCCESS: 0, PARAM_ERROR: 1001, NOT_FOUND: 1002, // 用户未找到(未注册) SYSTEM_ERROR: 1003, // USER_EXISTS: 1004, // 注册时用 // USER_NOT_EXISTS: 1005 // 可以用 NOT_FOUND 代替 }; // 获取用户信息及会员状态 (用于登录判断) module.exports = async function (params, context) { const { openid } = params; // 1. 参数验证 if (!openid) { return { code: ErrorCode.PARAM_ERROR, message: '参数错误,openid 缺失' }; } try { // 2. 根据 openid 查询用户信息 const userResult = await context.callModel({ name: "jz_users", // 查询用户表 methodName: "wedaGetRecordsV2", params: { filter: { where: { $and: [ { openid: { $eq: openid }, }, ], }, }, select: { $master: true }, // 获取主表字段 getCount: true, pageSize: 1, pageNumber: 1, } }); console.log("getUserInfo - userResult", userResult); // 检查用户是否存在 if (userResult.total === 0) { return { code: ErrorCode.NOT_FOUND, message: '用户未注册' // 返回用户未找到的特定错误码 }; } const user = userResult.records[0]; // 获取用户信息 // 3. 查询会员信息(如果用户存在) const memberResult = await context.callModel({ name: "jz_members", // 查询会员表 methodName: "wedaGetRecordsV2", params: { filter: { where: { $and: [ { userId: { $eq: user._id }, }, ], }, }, select: { userId: true,level:true,status:true,points:true,balance:true }, // 获取主表字段 getCount: true, pageSize: 1, pageNumber: 1, } }); console.log("getUserInfo - memberResult", memberResult); // 4. 组合返回结果 const isMember = memberResult.records && memberResult.records.length > 0; const memberInfo = isMember ? memberResult.records[0] : null; // 如果是会员则返回会员信息 return { code: ErrorCode.SUCCESS, data: { isRegistered: true, // 明确标记用户已注册 isMember: isMember, // 标记用户是否是会员 userInfo: user, // 返回用户信息 memberInfo: memberInfo // 返回会员信息 (如果存在) } }; } catch (error) { console.error("getUserInfo error:", error); return { code: ErrorCode.SYSTEM_ERROR, message: `系统错误: ${error.message}` }; } }代码说明:
这个 API 接收 openid。
首先查询 jz_users 表,看是否有匹配的 openid 用户。
如果用户不存在(list 为空),直接返回 NOT_FOUND 错误码,前端可以根据这个码判断用户未注册。
如果用户存在,获取用户记录,然后根据用户记录的 _id 去查询 jz_members 表,看是否有对应的会员记录。注意关联字段的查询方式 userId._id。
最后,返回一个结构化的数据对象,包含用户是否注册 (isRegistered)、是否会员 (isMember),以及用户和会员的详细信息。
这样前端只需要调用这一个 API,就能获取到用户的所有状态信息。
步骤 4:运行测试与配置出参
在平台提供的 API 测试界面,输入一个已知 openid(无论是已注册还是未注册的),运行测试,检查返回结果是否符合预期。然后配置出参自动映射。
图片
4.3 前端实现:页面加载时的状态判断与显示
在需要判断用户状态的页面(如“我的”页面),我们需要在页面加载时调用刚刚创建的 API,并根据返回结果更新页面显示。
步骤 1:创建变量
为了保持用户登录信息,需要先创建一个全局变量userData,类型是Object
图片
步骤2 :创建自定义方法
在代码区新建一个javascript方法,用来调用我们的API
图片
输入如下代码
export default async function getUserInfo() { const userInfo = await $w.auth.getUserInfo() const openid = userInfo.openId
Powered by 推特注册账号怎么跳过手机号 @2013-2022 RSS地图 HTML地图