🛠️ 零基础用 Claude Code 做出第一个小程序 · 第 2 周:做成微信小程序,跑在你手机上

小程序怎么识别用户:openid、云函数、不用登录页(云开发实战)

不用做登录页,微信已经知道他是谁

一句话先懂 · TL;DR

为什么小程序不需要自己做账号密码、openid 是什么、为什么它只能在云函数里安全拿到、什么时候才需要头像昵称。让 Claude Code 写第一个云函数。

你不需要做登录页

网页要识别用户,得做注册、登录、找回密码。小程序不用:用户打开小程序时已经登录了微信,微信会给他一个 openid,就是「这个人在你这个小程序里的唯一编号」。

上一课的云数据库「仅创建者可读写」,背后靠的就是 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 统计各用户完成数;只有进榜的用户才请求昵称头像用于展示

统计要跨用户,前端受权限限制拉不到别人的数据,且不该拉,所以在云函数里做;展示时才需要昵称,符合「按需索取」。改权限全开会把所有人的待办暴露给所有人。

想边练边学,而不只是读?

到互动课里答题、记进度、攒连胜——游客即可试学,无需注册。

进入互动课程 →

学点新东西,不错过更新

新课程、新功能、学习小技巧——偶尔一封,随时退订。