你不需要做登录页
网页要识别用户,得做注册、登录、找回密码。小程序不用:用户打开小程序时已经登录了微信,微信会给他一个 openid,就是「这个人在你这个小程序里的唯一编号」。
上一课的云数据库「仅创建者可读写」,背后靠的就是 openid:每条记录自动带上写入者的 openid,查询时自动只返回自己的。
openid 要在云函数里拿
前端代码跑在用户手机上,用户能改。所以openid 不在前端拿,在云函数里拿:云函数跑在微信的服务器上,微信会把调用者的 openid 直接塞给它,前端伪造不了。
让 Claude Code 写第一个云函数:
// cloudfunctions/getOpenid/index.js
const cloud = require('wx-server-sdk');
cloud.init();
exports.main = async () => {
const { OPENID } = cloud.getWXContext();
return { openid: OPENID };
};
// 前端调用
const { result } = await wx.cloud.callFunction({ name: 'getOpenid' });什么时候才需要头像昵称?只有你要展示给别人看的时候(排行榜、评论)。待办清单不需要,就别弹授权框,弹了用户还烦。
自测 · 学完检查一下
想真正动手做题、记进度、攒连胜?到互动课里练。
小杨打算给待办小程序做一个「手机号 + 密码」的注册登录页。按本课的观点,问题在哪?
答案:多此一举:微信已经通过 openid 识别了用户,云数据库也默认按它隔离数据
小程序天然有身份,自己再做一套账号密码只会增加用户流失和你的维护成本。除非你要让用户在网页端也登录同一个账号,否则不需要。
AI 提议「在前端让用户手动填一个用户名当身份,存到数据库里区分数据」。这个方案的问题是?
答案:前端填的任何东西用户都能改,改成别人的用户名就能看到别人的数据;身份应来自云函数里的 openid
身份的核心要求是「伪造不了」。前端来的任何输入都可以被改;只有微信在服务器端塞给云函数的 openid 是可信的。这是安全上最基础的一条。
判断:待办清单小程序应该在首页一打开就弹窗请求用户头像和昵称,这样显得更专业。
答案:错
头像昵称只在需要展示给别人看时才要。待办清单没有这个场景,弹授权框只会让用户在第一秒就想关掉,而且审核时「索取与功能无关的信息」是常见的拒审理由。
你想加一个「本周完成最多的用户排行榜」。下面哪个是正确的思路?
答案:云函数里按 openid 统计各用户完成数;只有进榜的用户才请求昵称头像用于展示
统计要跨用户,前端受权限限制拉不到别人的数据,且不该拉,所以在云函数里做;展示时才需要昵称,符合「按需索取」。改权限全开会把所有人的待办暴露给所有人。