推特注册账号怎么跳过手机号
新闻动态

腾讯云开发低代码实战:第二篇用户登录

发布日期: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地图