Laf 快速上手:用云函数 + 云数据库实现用户注册/登录

发布时间:2026/11/12 3:58:38

Laf 快速上手:用云函数 + 云数据库实现用户注册/登录 Laf 快速上手用云函数 云数据库实现用户注册/登录【免费下载链接】lafLaf is a vibrant cloud development platform that provides essential tools like cloud functions, databases, and storage solutions. It enables developers to quickly unleash their creativity and bring innovative ideas to life with ease.项目地址: https://gitcode.com/GitHub_Trending/la/laf本文基于 Laf 官方快速开始教程带你用约 5 分钟在 Laf 云开发平台上完成一个「用户注册/登录」功能的开发编写register、login两个云函数用云数据库存储用户信息用内置 JWT 能力签发访问令牌并展示 curl 与前端 HTTP 请求两种调用方式。读完本文你将掌握 Laf 云函数的编写、发布、调用全流程并理解cloud.mongo、cloud.getToken等 API 在运行时中的真实实现位置。环境准备创建应用按 docs/zh/quick-start/login.md 的原始步骤在 Laf 平台laf.run注册一个账户在 Laf 控制台点击左上角「新建」按钮创建一个新应用待应用成功启动后点击右侧「开发」按钮进入应用的「开发控制台」。后续的函数开发都在「开发控制台」中进行。编写用户注册云函数register在「云函数」管理页面点击「新建函数」创建函数register点击进入 WebIDE 编写以下代码与官方教程一致import cloud from lafjs/cloud; import { createHash } from crypto; const db cloud.mongo.db export default async function (ctx: FunctionContext) { const username ctx.body?.username || ; const password ctx.body?.password || ; // check param if (!/^[a-zA-Z0-9]{3,16}$/.test(username)) return { error: invalid username }; if (!/^[a-zA-Z0-9]{3,16}$/.test(password)) return { error: invalid password }; // check username existed const exists await db .collection(users) .countDocuments({ username: username }) if (exists 0) return { error: username already existed }; // add user const res await db.collection(users).insertOne({ username: username, password: createHash(sha256).update(password).digest(hex), created_at: new Date(), }); console.log(user registered: , res.insertedId); return { data: res.insertedId }; };这段代码的完整流程是参数校验用户名/密码均为 316 位字母数字→ 用countDocuments检查用户名是否已存在 → 将密码做 SHA-256 哈希后insertOne写入users集合 → 返回新建文档的insertedId。从源码结构看cloud.mongo并非一个空壳在 Node.js 运行时中createCloudSdk会把DatabaseAgent持有的数据库连接注入 SDK 实例见 runtimes/nodejs/src/support/cloud-sdk.tsconst cloud: CloudSdkInterface { database: () getDb(DatabaseAgent.accessor), invoke: invokeInFunction, shared: _shared_preference, getToken: getToken, parseToken: parseToken, mongo: { client: DatabaseAgent.client as any, db: DatabaseAgent.db as any, }, // ... }也就是说cloud.mongo.db是 Laf 为当前应用分配的云数据库实例兼容 MongoDB 驱动接口db.collection(users)上的countDocuments、insertOne、findOne等就是标准的集合操作。SDK 侧的封装类见 packages/cloud-sdk/src/cloud.ts其中mongo以 getter 形式代理到运行时实现业务代码只需import cloud from lafjs/cloud即可无需关心底层连接细节。编辑完成后点击 WebIDE 右上角的「发布」按钮函数即发布上线。编写用户登录云函数login同样新建login云函数编写以下代码import cloud from lafjs/cloud; import { createHash } from crypto; const db cloud.mongo.db export default async function (ctx: FunctionContext) { const username ctx.body?.username || const password ctx.body?.password || // check user login const user await db .collection(users) .findOne({ username: username, password: createHash(sha256).update(password).digest(hex), }) if (!user) return { error: invalid username or password }; // generate jwt token const user_id user._id; const payload { uid: user_id, exp: Math.floor(Date.now() / 1000) 60 * 60 * 24 * 7, }; const access_token cloud.getToken(payload); return { uid: user_id, access_token: access_token, }; };登录逻辑用「用户名 密码 SHA-256 哈希」作为查询条件findOne命中即成功随后构造payloaduid为用户文档_idexp为 7 天后的 Unix 秒级时间戳即令牌有效期调用cloud.getToken(payload)签发 JWT并把uid与access_token一并返回给客户端。发布方式同上点击右上角「发布」即可。源码级印证getToken如何签发 JWTcloud.getToken的实际实现在 runtimes/nodejs/src/support/token.tsexport function getToken(payload: any, secret?: string): string { return jwt.sign(payload, secret ?? Config.SERVER_SECRET) }底层使用jsonwebtoken库签名密钥默认取运行时的Config.SERVER_SECRET每个应用独立业务代码无需自行管理密钥。对应的验签函数parseTokentoken.ts#L26-L34在 token 缺失或校验失败时返回null这一点对后续鉴权写法很关键。后续云函数如何校验登录身份Bearer TokenLaf 云函数内置了Bearer Token身份验证客户端在请求头中携带Authorization: Bearer ${jwt}运行时会在中间件中解析它见 runtimes/nodejs/src/index.tsapp.use(function (req, res, next) { const token splitBearerToken(req.headers[authorization] ?? ) const auth parseToken(token) || null req[user] auth // ... next() })解析结果挂到req[user]上并传入函数上下文因此在任意云函数中可以直接读取ctx.user获得login中写入的payload即uid。若请求未携带Authorization头、格式不是Bearer ${jwt}或 token 验签不通过ctx.user为null。完整的生成/验证 JWT 示例可继续阅读 docs/zh/cloud-function/auth.md。调用云函数函数发布后Laf 会为应用分配独立的调用域名路径即函数名。使用 curl 调用在函数详情页右上方可复制云函数的调用地址也可将下面的命令中APPID替换为自己的 APPID 后执行# 注册用户 curl -X POST -H Content-Type: application/json -d {username: admin, password: admin} https://APPID.laf.run/register # 用户登录 curl -X POST -H Content-Type: application/json -d {username: admin, password: admin} https://APPID.laf.run/login在前端项目中用 HTTP 请求调用在 Vue/React/Angular/小程序等任意前端工程中都可以直接通过 HTTP 调用这两个函数import axios from axios const baseUrl https://APPID.laf.run // register async function register(username, password) { try { const response await axios.post(baseUrl /register, { username: username, password: password }); console.log(response); } catch (error) { console.error(error); } } // login async function login(username, password) { try { const response await axios.post(baseUrl /login, { username: username, password: password }) console.log(response) } catch (error) { console.error(error) } }为什么「路径即函数名」从源码结构看Node.js 运行时的 Express 应用注册了一个通配路由runtimes/nodejs/src/handler/router.tsrouter.all(*, uploader.any(), (req, res) { let func_name req.path // remove the leading slash if (func_name.startsWith(/)) { func_name func_name.slice(1) } // ... req.params[name] func_name handleInvokeFunction(req, res) })即请求路径去掉开头的/后直接作为函数名交给handleInvokeFunction执行。这解释了为何https://APPID.laf.run/login会命中login函数同时uploader.any()multer的接入也让同一入口天然支持文件上传场景ctx.body承载 JSON 请求体文件则进入上传队列。实践注意点密码存储本教程使用 SHA-256 摘要做密码哈希是最小可用的演示方案。crypto模块本身提供加盐哈希、时序安全比较等更完整的原语生产环境可按需加强。令牌有效期exp写在 payload 中示例为 7 天JWT 到期后parseToken验签会失败ctx.user变为null客户端应引导用户重新登录。SDK 弃用提示从 packages/cloud-sdk/src/cloud.ts 的注释可见cloud.fetchAxios 实例与cloud.invoke均已标记 deprecated前者建议直接使用全局fetch()后者建议直接 import 函数模块调用cloud.env也建议改用process.env。数据库连接就绪运行时通过DatabaseAgent.ready在连接建立后才填充cloud.mongo对象见 cloud-sdk.ts#L46-L49健康检查接口/_/healthz会返回 503 直到数据库就绪可用作发布后的探活手段。下一步完成注册/登录后可沿着官方文档体系继续深入云函数docs/zh/cloud-function/index.md云数据库docs/zh/cloud-database/index.md云存储docs/zh/cloud-storage/index.md【免费下载链接】lafLaf is a vibrant cloud development platform that provides essential tools like cloud functions, databases, and storage solutions. It enables developers to quickly unleash their creativity and bring innovative ideas to life with ease.项目地址: https://gitcode.com/GitHub_Trending/la/laf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/12 3:58:36

Python实战:从零开发背单词APP的核心技术全解析

简介:这是一套以Python语言开发背单词App为目标的完整项目实战源码,技术栈涉及Kivy、SQLite与Virtualenv,适合已有Python基础、希望快速进入移动端开发领域的学习者与开发者。项目围绕“51斩百词”应用展开,实现了单词分类、查词发…

2026/11/12 3:54:18

龙湾电工证哪里报名的 怎么报名不踩坑

龙湾电工证哪里报名的 怎么报名不踩坑 实操考试心里没底怕挂科,龙湾电工证哪里报名的,怎么报名才能一次过?不少学员在备考前最大的担心不是理论题,而是实操考试的流程和标准,尤其是像低压电工、高压电工这类工种,操作失误就可能被判定不合格。…

2026/11/12 3:54:18

工地太忙根本没时间复习考试?巩义电工证在哪里考呢良心建议来了

工地太忙根本没时间复习考试?巩义电工证在哪里考呢良心建议来了 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。尤其在巩义这种施工项目集中的地方,电工证不仅关系到能否上岗,更是职业发展的“通行证”。但很多小伙伴一听到要考试,就犯愁:*…

2026/11/12 3:54:18

接线就需要考取电工证良心建议:电工证考前考后全攻略

接线就需要考取电工证良心建议:电工证考前考后全攻略 你是不是正为 急需特种作业证才能上岗找工作 而焦虑?别急,接线就需要考取电工证,这是很多电工从业者绕不开的门槛,尤其是像我这样在漯河劳务班组做负责人的人,深知一纸证书就是敲门砖。今天就从实…

2026/11/12 3:54:18

海兴哪里能办电工证考前押题攻略:外省证能不能转,全在这篇说透了

海兴哪里能办电工证考前押题攻略:外省证能不能转,全在这篇说透了 之前考的证在外省能不能转过来?这个问法几乎成了所有想考电工证或者已经在别的地方考了证的朋友们最关心的问题。别急,今天这篇【海兴哪里能办电工证】考前押题攻略,不仅告诉你怎么转,还…

2026/11/12 3:49:17

电工证不需复审吗?考前押题帮你搞懂新规和备考方向

电工证不需复审吗?考前押题帮你搞懂新规和备考方向 证书过期了不知道怎么复审延期,这事儿真不是小事。尤其像低压电工证、高压电工证这类特种作业操作证,如果逾期不处理,不仅影响正常上岗,还可能被认定为“无证上岗”,面临企业处罚甚至个人责任。现在很…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑