手机号注册登录功能开发 | 2025 年第 28 周草梅周报

本文在 草梅友仁的博客 发布和更新,并在多个平台同步发布。如有更新,以博客上的版本为准。您也可以通过文末的 原文链接 查看最新版本。

前言

欢迎来到草梅周报!这是一个由草梅友仁基于 AI 整理的周报,旨在为您提供最新的博客更新、GitHub 动态、个人动态和其他周刊文章推荐等内容。


本周依旧在开发 草梅 Auth 中。

你也可以直接访问官网地址:auth.cmyr.dev/

本周主要在开发手机号注册登录方面的功能。

有关手机号的内容,这是一个乍看之下十分简单,但实际上存在很多技术上乃至政策上的困难。

先简单讲下技术上的难题。

对大部分人而言,随着移动互联网的发展,手机号已经成为每个人日常生活不可缺少的东西。

在网上,无论是注册账号,还是实名验证,都少不了使用手机号接收短信验证码。

在日常生活中,我们接触到的手机号可能是这样的:17012345678

其中,有时候为了方便人看号码,也会添加一些空格来分割,例如 170 1234 5678

国内的手机号码中,一般前 3 位是号码段(也叫移动接入码或运营商代码),后 8 位是用户段(包含 4 位地区编码和 4 位用户随机分配码),总计 11 位。

但这只是国内地区的手机号格式,如果把目光放向国际电话,就会发现,11 位的手机号码还不足以完整的描述一个在全球独一无二的号码,此时,就需要添加国家地区代码

以中国大陆为例,就是 86,所以之前的例子中,加上国家地区代码后,完整的格式就是:8617012345678

但这样其实还是错的,当拨打国际电话的时候,需要添加 + 号作为国际接入码,所以正确的格式是 +8617012345678

+号并不是真正的国际接入码,每个国家和地区的接入码不一定一样,例如在中国为00,在美国为011等。

所以,要真正描述一个在全球独一无二的号码,需要添加国际接入码和国家地区代码才能准确描述。

有关手机号码的验证,可参考 validator.js;而格式化的话则可以参考 google-libphonenumber。都可以比较方便的解决手机号格式相关问题。

当然了,顺着之前的思路,开发者很快就会注意到,在前端页面中,让用户输入手机号的时候,就得增加一个下拉框来让用户选择自己所使用的手机号的国家或地区。

当用户选择了国家地区代码,以及输入手机号之后,就可以格式化成标准的 E.164 格式号码,即 +8617012345678 的格式。

这也是我比较建议存储在数据库中的格式,在全球范围内都无歧义,对于系统的扩展比较良好。

当然,只针对国内用户的话,也可以去掉国家地区代码。

不过,虽然 E.164 比较方便数据库存储,但是不太方便用户阅读,毕竟一长串数字,不分组的话很容易看串了。

因此,在用户端,还是要再格式化成方便阅读的国际格式,例如 +86 170 1234 5678

以上是一些技术上的难题,包括手机号的国家地区代码的处理,数据库的存储,以及向用户的展示。

不过,和这些相比,政策上的困难其实才是最大的。

首先是,出于反诈、反垃圾短信等原因,目前国内对于个人开发者的短信发送权限基本上关停了,目前普遍仅限企业用户调用短信接口。

所以,对于国内的个人开发者而言,如果还想使用短信功能的话,基本上需要借助第三方平台来进行发送,无论是成本还是风险都有所上升。

一个比较好一些的方案是,采用多家第三方平台互为备份,这样一来,能在一定程度上保证短信功能的可用性。

当然了,考虑到短信方案的巨大成本,其实最简单的方案反而是抛弃短信,采用邮件系统,这也是开源项目的普遍做法。

不过,如果有面向国内用户的想法的话,还是得考虑支持短信功能,否则在用户注册上体验不佳。

草梅 Auth 目前仅支持 Spug 作为短信推送渠道,如果各位用户有其他需要接入的推送渠道,可在 issuediscussion 中提出,会看情况适配

除了以上这些问题以外,还有像限流(防止短信接口爆破)、隐私保护(对手机号打码)等细节上的问题,在此就不继续展开了。

以上,就是我最近在开发手机号注册登录方面的功能中所遇到的一些问题和解决问题的心得。

如有疏漏,欢迎在评论区进行更多讨论。

最新 GitHub 加星仓库

  • CaoMeiYouRen starred google-libphonenumber - 2025-07-12 16:22:58 谷歌的 libphonenumber Node.js 包是一个 JavaScript 库,提供电话号码解析、格式化和验证功能。它在其存储库中获得了 1450 颗星。该软件包由谷歌维护,为 Node.js 应用程序提供最新、可靠的电话号码处理功能。
  • CaoMeiYouRen starred rustfs - 2025-07-11 10:48:51 高性能分布式对象存储系统,作为 MinIO 的替代方案。采用 Rust 语言开发,在 GitHub 上获得 4629 星标。

其他博客或周刊推荐

阮一峰的网络日志

老胡的周刊

阿猫的博客

潮流周刊

二丫讲梵的学习周刊

总结

本周的更新和动态如上所示。感谢您的阅读! 您可以通过以下方式订阅草梅周报的更新:

往期回顾

本文作者:草梅友仁

本文地址:blog.cmyr.ltd/archives/20...

版权声明:本文采用 CC BY-NC-SA 4.0 协议 进行分发,转载请注明出处!

相关推荐
冬奇Lab35 分钟前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab36 分钟前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
sunny8652 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
KEEN的创享空间3 小时前
AI编程从0到1之10X提效(Vibe Coding 氛围式编码 )09篇
openai·ai编程
AlienZHOU4 小时前
为 AI Agent 编写高质量 Skill:Claude 官方指南
agent·ai编程·claude
恋猫de小郭5 小时前
移动端开发稳了?AI 目前还无法取代客户端开发,小红书的论文告诉你数据
前端·flutter·ai编程
KaneLogger6 小时前
【翻译】打造 Agent Skills 的最佳实践
agent·ai编程·claude
王小酱6 小时前
Everything Claude Code 文档
openai·ai编程·aiops
雮尘7 小时前
如何在非 Claude IDE (TARE、 Cursor、Antigravity 等)下使用 Agent Skills
前端·agent·ai编程
刘贺同学7 小时前
Day12-龙虾哥打工日记:OpenClaw 子 Agent 到底看到了什么?
aigc·ai编程