阅读视图

发现新文章,点击刷新页面。

单点登录(SSO)在前端世界的落地形态

上一章我们聊了 OAuth2 与第三方登录的三个阶段:从 Implicit Flow 的混乱时代,到 PKCE 的安全崛起,再到 OAuth 2.1 + 一键登录的无感体验。但 OAuth/OIDC 主要解决的是“授权 + 身份认证”,在企业内部多系统间实现“一次登录、处处可用”的真正 SSO 时,前端还需要面对更复杂的落地挑战:跨域、跨顶级域、微前端、浏览器隐私策略变化等。

这一篇,我们从前端视角拆解 SSO 的主流落地形态,重点对比三种核心实现方式,并讨论 2024–2026 年浏览器变化(第三方 Cookie 逐步淘汰)带来的冲击与应对。

1. SSO 在前端的核心职责与挑战(2026 年视角)

前端在 SSO 中的真实角色:

  • 检测登录状态(silent check)
  • 无感跳转 / 刷新 token
  • 跨应用同步登录/登出状态
  • 处理跨域(子域 / 不同顶级域)
  • 兼容隐私沙盒(Chrome Partitioned Cookies、Storage Partitioning)

2025–2026 年最大变化:

  • 第三方 Cookie 基本被禁用(Chrome 100% rollout)
  • Storage Partitioning(不同顶级域的 localStorage 分区)
  • iframe + postMessage 方案受限(但仍可部分工作)

因此,纯 Cookie 共享 → 纯 Token 集中 → 混合 / BFF 模式 成为主流演进路径。

2. 三种主流前端 SSO 落地方式对比(2024–2026 现状)

实现方式 适用场景 跨域支持 依赖第三方 Cookie 浏览器兼容性(2026) 安全性 复杂度 代表方案 / 协议 当前流行度
基于 Cookie 的域共享 子域 SSO(*.company.com) 子域 / 同顶级域 是(顶级域 Cookie) 高(SameSite=None+Secure) 中–高 CAS、SAML、OIDC Cookie 模式 ★★★☆☆
基于 Token 的集中式认证 跨顶级域、多 SPA、微前端 任意域 最高(无 Cookie 依赖) 中–高 OIDC + PKCE + Refresh Token ★★★★★
iframe + postMessage 通信 遗留系统、临时桥接 跨域 部分(或无) 中(分区 + 限制) 中–低 早期 CAS、Zendesk cross-storage ★☆☆☆☆

方式一:基于 Cookie 的域共享(最传统、最简单)

适用:所有应用在同一顶级域下(如 app1.company.com、app2.company.com、sso.company.com)

核心机制:

  • SSO 服务器 Set-Cookie 时设置 domain=.company.com; Secure; HttpOnly; SameSite=Lax/None
  • 浏览器在所有子域自动携带该 Cookie
  • 前端几乎无感:只需检查 Cookie 或调用 /userinfo 接口

优点:浏览器原生、无需前端代码干预、登出可直接删 Cookie

缺点:

  • 仅限子域(跨顶级域失效)
  • 第三方 Cookie 限制下需 SameSite=None; Secure + 用户许可
  • 不适合微前端 / 多顶级域场景

2026 年现状:企业内网、传统 ToB 系统仍大量使用,但新项目已转向 Token 模式。

方式二:基于 Token 的集中式认证(目前最推荐、最主流)

适用:跨顶级域、多前端(React/Vue/Next.js + 微前端)、移动 + Web 混合

核心流程(OIDC + Authorization Code + PKCE + Refresh Token):

  1. 用户访问任意前端 → 未登录 → 重定向到 SSO 中心(/authorize
  2. SSO 中心登录成功 → 返回 code → 前端(或 BFF)用 PKCE 换 token(access_token + id_token + refresh_token)
  3. 前端存储 refresh_token(HttpOnly Cookie 或 secure storage),access_token 放内存 / localStorage(短效)
  4. 所有前端共享同一 SSO 中心 → 登录一次,后续 silent renew(iframe 或 refresh token)
  5. 登出:调用 /logout + 清本地 token + 通知其他 tab(BroadcastChannel / localStorage 事件)

前端关键实现点:

  • Silent authentication:hidden iframe 打开 authorize endpoint(check session)
  • Refresh:用 refresh_token 静默换新 access_token
  • 多应用同步:BroadcastChannel 或 Service Worker 监听登录/登出事件

代表方案:

  • Auth0 / Okta / Clerk / Supabase Auth / Keycloak(OIDC 模式)
  • NextAuth / Lucia + OIDC provider
  • 自建:oidc-client-ts / @auth0/auth0-spa-js

2026 年优势:

  • 无第三方 Cookie 依赖
  • 支持跨顶级域
  • 与微前端兼容(各子应用独立管理 token,但共享 SSO 会话)

痛点:

  • 前端需处理 token 刷新、silent renew、登出广播
  • refresh_token 安全存储(推荐 BFF 或 HttpOnly Cookie)

方式三:iframe + postMessage(逐渐被淘汰的过渡方案)

早期流行于跨域 SSO(不同顶级域),典型库:cross-storage、pym.js

机制:

  • 主应用嵌入 hidden iframe 指向 SSO 域
  • iframe 内登录 → localStorage 写 token
  • postMessage 通知父窗口 → 父窗口读取

2023–2025 年后问题:

  • Storage Partitioning(Chrome 等)让跨顶级域 localStorage 隔离
  • iframe sandbox 限制 + 第三方 Cookie 禁用
  • 性能差、SEO 问题、用户体验差

2026 年现状:仅遗留系统或极特殊场景使用,新项目已弃用。

3. 微前端 / 多 SPA 下的 SSO 特殊痛点与解决方案

微前端(qiankun、Module Federation、single-spa)常见场景:

  • 不同子应用可能不同框架、不同构建
  • 需要统一登录状态

解决方案(2025–2026 推荐):

  1. 统一 SSO 中心 + Token 模式:所有子应用用同一 OIDC Client ID,共享 refresh_token(通过主应用分发或 BFF)
  2. 主应用代理登录:基座应用负责 silent check 和 token 管理,子应用通过 props / 事件总线获取状态
  3. BroadcastChannel + localStorage 事件:登录/登出时广播,子应用监听同步
  4. BFF(Backend for Frontend):每个子应用有独立 BFF,BFF 持 refresh_token,前端只拿短效 access_token

4. 2026 年 SSO 前端 Checklist(实用建议)

  • 优先选 OIDC + PKCE + Refresh Token Rotation
  • 避免依赖第三方 Cookie(除非子域 + SameSite=None)
  • 使用成熟 SDK(oidc-client-ts、@auth0/auth0-spa-js、next-auth)
  • Silent renew 用 refresh_token 而非 iframe(更可靠)
  • 登出需调用 end_session_endpoint + 清本地 + 广播
  • 高安全场景用 BFF 模式(token 永不出现在浏览器 JS)
  • 测试隐私沙盒:Chrome Incognito + 第三方 Cookie 禁用

小结 & 过渡

前端 SSO 从 Cookie 域共享 → iframe 桥接 → Token 集中式(OIDC 主导)的演进,本质上是适应浏览器隐私保护 + 跨域需求的过程。

2026 年,基于 OIDC + Refresh Token 的集中式认证 是最主流、最可靠的落地形态,尤其适合现代 Web / 微前端 / 跨域场景。

OAuth2 与第三方登录的三个阶段(2010–至今)

上一章我们聊了 Token 时代的巅峰与隐痛:双 Token、刷新机制、黑名单战争,以及各种安全加固手段。但在第三方登录(Social Login、第三方授权)领域,OAuth2 的演进路径更独立,也更戏剧化。

OAuth2 从 2010 年左右开始大规模落地,到 2025–2026 年已进入 OAuth 2.1 时代。前端在其中的角色从“被动跳转 + 解析 URL fragment”到“主动管理 PKCE + 安全刷新”,发生了翻天覆地的变化。

这一篇,我们按时间和技术范式把 OAuth2 + 第三方登录分为三个主要阶段。

1. 第一阶段:早期混乱与 Implicit Flow 主导(2010–2016 左右)

OAuth 1.0(2007–2010)太复杂,OAuth 2.0(RFC 6749,2012 年正式发布)简化了授权框架,但早期实现五花八门。

典型第三方登录流程(Google、Facebook、Twitter 等 2010–2014 年):

  • Implicit Flow(response_type=token)最流行,尤其在 SPA 和早期移动 Web
  • 前端直接发起跳转:https://accounts.google.com/o/oauth2/auth?client_id=xxx&redirect_uri=yyy&response_type=token&scope=profile email
  • 用户同意后,授权服务器重定向回 redirect_uri#access_token=xxx&expires_in=3600
  • 前端解析 URL fragment(location.hash),拿到 access_token

为什么 Implicit Flow 这么火?

  • 当时浏览器跨域限制严格(CORS 不完善,XMLHttpRequest POST 到 token endpoint 跨域困难)
  • 前端无法安全存储 client_secret(public client)
  • 简单:不用后端参与 token 交换

前端典型代码(2012–2015 年 jQuery/AngularJS 时代):

// 登录按钮点击
window.location.href = `https://accounts.google.com/o/oauth2/auth?...&response_type=token`;

// 回调页(或单页 hashchange 监听)
function handleCallback() {
  const hash = window.location.hash.substring(1);
  const params = new URLSearchParams(hash);
  const token = params.get('access_token');
  if (token) {
    localStorage.setItem('google_token', token);
    // 用 token 调用 /userinfo 或 API
  }
}

痛点与安全隐患

  • Token 暴露在 URL(浏览器历史、referer、日志、肩窥攻击)
  • 无法安全用 refresh_token(规范不推荐)
  • XSS 风险极高(token 在 JS 可读)
  • 2015–2016 年 OAuth 安全最佳实践文档开始警告 Implicit Flow

这个阶段国内微信、QQ、新浪微博登录也大量用类似“跳转 + callback 带 code/token”模式。

2. 第二阶段:Authorization Code + PKCE 的崛起与 Implicit 的逐步废弃(2016–2022 左右)

2015–2016 年,浏览器 CORS 完善 + XMLHttpRequest/Fetch 支持跨域 POST,技术条件成熟。

关键转折:

  • 2015 年:RFC 7636 PKCE(Proof Key for Code Exchange)发布,专为 public client(SPA、移动端)设计
  • 2017–2019 年:OAuth Security BCP(Best Current Practice)草案强烈推荐 Authorization Code + PKCE,视 Implicit 为 deprecated
  • 2019 年:Okta、Auth0 等大厂公开宣布“Implicit Flow 已死”
  • 2020 年后:Chrome/Firefox 等浏览器加强 URL fragment 保护 + 第三方 Cookie 限制,Implicit 更难用

现代标准流程(Authorization Code + PKCE)

  1. 前端生成 code_verifier(随机高熵字符串) + code_challenge = BASE64URL(SHA256(verifier))
  2. 跳转授权:response_type=code&code_challenge=xxx&code_challenge_method=S256
  3. 用户同意 → 重定向回 redirect_uri?code=yyy
  4. 前端(或后端代理)用 code + verifier POST 到 token endpoint 换 token

前端示例(现代 React/Vue/Next.js + oidc-client-js 或 AppAuth 库):

// 使用 @auth0/auth0-spa-js 或类似库
const auth0 = createAuth0Client({
  domain: 'xxx.auth0.com',
  clientId: 'your_client_id',
  redirectUri: window.location.origin,
  useRefreshTokens: true,  // 支持安全 refresh
});

// 登录
await auth0.loginWithRedirect({
  authorizationParams: {
    scope: 'openid profile email',
    // PKCE 自动处理
  }
});

// 回调处理(自动)
const user = await auth0.getUser();

为什么 PKCE 更好?

  • Token 从不走 URL(防泄露)
  • Code 即使被截获,攻击者无 verifier 无法换 token
  • 支持 refresh_token(带 rotation 更安全)
  • 前端角色:管理 PKCE 参数、silent refresh(iframe 或 refresh token)

这个阶段 OIDC(OpenID Connect,2014 RFC)全面普及:返回 id_token(JWT 格式身份令牌)+ access_token,前端可直接解析用户信息而无需再调 userinfo endpoint。

国内:微信/支付宝/抖音等逐步支持 PKCE 或后端代理模式。

3. 第三阶段:OAuth 2.1 时代 + 一键登录 / 无感体验(2023–至今,2026 年现状)

OAuth 2.1(draft 持续迭代,至 2025 年 10 月最新 draft-14,预计很快 RFC)正式固化最佳实践:

  • 完全移除 Implicit Flow
  • Authorization Code 强制要求 PKCE(所有 client 类型,无例外)
  • 移除 ROPC(Resource Owner Password Credentials,密码直传 grant,已废弃)
  • 强制 exact redirect_uri 匹配、更严格参数校验
  • 推荐 refresh token rotation + sender-constrained tokens

前端变化:

  • 几乎所有主流 SDK(如 Google Identity Services、Apple Sign in JS、Auth0、Clerk、Supabase Auth)默认 PKCE + OIDC
  • 一键登录普及:Google One Tap、Apple Sign in with Apple、微信一键登录(运营商取号/静默授权)
  • Popup / Redirect 混合:早期 popup 窗口常见,现在 redirect + state 参数防 CSRF 更安全
  • 移动端 / Hybrid:AppAuth-iOS/Android + WebView 统一用 Code + PKCE
  • 国内特色:手机号一键登录(本机号码识别)+ 微信/支付宝生态闭环

典型现代前端接入(2025–2026):

  • 用库处理一切:oidc-client-ts、@okta/okta-auth-js、next-auth 等
  • 支持 silent authentication(hidden iframe renew)
  • Passkey/FIDO2 作为备用(下一章无密码主题)

OAuth 2.1 影响(2025–2026 已大量落地):

  • 旧 Implicit 项目必须迁移(许多 SaaS 2024–2025 年强制下线 Implicit 支持)
  • 前端复杂度略升(需处理 PKCE),但库屏蔽了细节
  • 安全性大幅提升:token 泄露窗口缩小、可主动 revoke

小结 & 过渡

OAuth2 + 第三方登录的三个阶段总结:

阶段 时间 主导 Flow 前端角色变化 安全水平 当前状态(2026)
第一阶段 2010–2016 Implicit Flow 跳转 + 解析 URL fragment 已废弃
第二阶段 2016–2022 Auth Code + PKCE 管理 PKCE + token 刷新 中–高 主流
第三阶段 2023–至今 OAuth 2.1 强制 PKCE 一键/无感 + OIDC 身份解析 标准 & 强制趋势

OAuth2 让前端从“被动接收 token”进化到“主动、安全地管理授权流程”。但第三方登录终究是“授权”而非“认证”——真正补全身份语义的是 OpenID Connect。

前端安全问题详解:原理、风险与防护措施

在现代Web应用中,前端作为用户与后端交互的桥梁,承担着越来越多的逻辑处理和数据展示任务。然而,随着前端框架(如React、Vue、Angular)的普及和复杂度的增加,前端安全问题也日益突出。这些问题不仅可能导致数据泄露、用户隐私侵犯,还可能引发更严重的系统级攻击。根据OWASP(Open Web Application Security Project)的前端安全指南,XSS、CSRF 等漏洞常年位居Web安全风险榜单前列。本文将介绍几种常见的前端安全问题,包括其原理、潜在风险,并提供实用的防护措施,帮助开发者构建更安全的应用。

1. 跨站脚本攻击(XSS)

原理介绍

XSS(Cross-Site Scripting)是一种注入攻击,攻击者通过将恶意脚本(如JavaScript)注入到Web页面中,当用户浏览器渲染页面时,这些脚本被执行。核心原因是用户输入没有被正确转义或过滤,导致恶意代码与正常HTML/JS混淆。

XSS 分为三种类型:

  • 反射型(Reflected XSS):恶意代码通过URL参数(如?search=<script>alert(1)</script>)传入,后端直接反射回页面。浏览器执行时,脚本运行在受害者浏览器上下文中。
  • 存储型(Stored XSS):恶意代码存储在数据库(如评论区),当其他用户访问时被加载并执行。
  • DOM型(DOM-Based XSS):前端JavaScript直接从来源(如URL hash)取值并动态修改DOM,导致脚本注入。

浏览器同源策略(SOP)无法阻止XSS,因为恶意脚本被视为页面自身的一部分。

风险

  • 窃取Cookie、Session Token,导致账户劫持。
  • 键盘记录、钓鱼页面伪造。
  • 利用浏览器进行DDoS或挖矿。

防护措施

  • 输入输出转义:使用库如DOMPurify对用户输入进行HTML实体转义(e.g., <&lt;)。
  • Content Security Policy (CSP):在HTTP头设置CSP策略,限制脚本来源(如script-src 'self'),防止外部脚本加载。
  • HttpOnly Cookie:设置Cookie的HttpOnly标志,防止JS访问Cookie。
  • 框架内置防护:React/Vue使用虚拟DOM和模板系统自动转义;避免dangerouslySetInnerHTML。
  • 最佳实践:定期扫描漏洞,使用OWASP XSS Prevention Cheat Sheet。

2. 跨站请求伪造(CSRF)

原理介绍

CSRF(Cross-Site Request Forgery)利用浏览器自动携带Cookie的机制,诱导用户在已登录状态下访问恶意页面,该页面触发跨站请求(如<img src="bank.com/transfer?amount=1000">),服务器误以为是用户合法操作。

核心机制:浏览器发送请求时,只检查目标域名匹配Cookie的domain属性,而不验证请求来源。攻击无需窃取Cookie,只需“借用”用户的浏览器发送。

类型:

  • GET型:通过图片或链接触发。
  • POST型:通过隐藏表单自动提交。

风险

  • 执行敏感操作,如转账、修改密码、删除数据。
  • 在社交平台上伪造发帖或点赞,导致声誉损害。

防护措施

  • CSRF Token:服务器生成随机Token,嵌入表单或Header;提交时验证Token匹配。
  • SameSite Cookie:设置Cookie的SameSite属性为LaxStrict,浏览器在跨站请求中不携带Cookie(Chrome默认Lax)。
  • 自定义Header:要求AJAX请求携带X-CSRF-Token,浏览器默认不跨站添加。
  • Referer检查:验证HTTP Referer头是否来自本站(但可伪造,结合其他使用)。
  • 框架支持:Spring Security、Django等内置CSRF防护;前端框架如Axios可自动添加Token。

3. 点击劫持(Clickjacking)

原理介绍

点击劫持通过将目标页面嵌入恶意,并使用CSS使其透明或重叠在诱饵元素上。用户点击“诱饵”时,实际点击了目标页面的按钮(如“点赞”或“转账”)。

原理基于的嵌套和样式操控,浏览器允许跨域iframe,但用户交互被误导。

风险

  • 诱导用户执行 unintended 操作,如关注账户或授权权限。
  • 结合CSRF放大攻击。

防护措施

  • X-Frame-Options头:设置DENYSAMEORIGIN,禁止页面被iframe嵌入。
  • CSP frame-ancestors:限制可嵌入的来源(如frame-ancestors 'self')。
  • JavaScript检测:检查window.top !== window.self,如果是iframe则隐藏内容。
  • 用户教育:但主要靠服务器端防护。

4. 原型链污染(Prototype Pollution)

原理介绍

JavaScript对象继承自Object.prototype,攻击者通过合并用户输入(如JSON.parse)污染原型链(e.g., 设置__proto__.toString = evilFunction),影响所有对象的行为。

常见于lodash/underscore的merge函数漏洞,或Node.js环境下的参数污染。

风险

  • 导致DoS(拒绝服务),如污染Array.prototype导致循环崩溃。
  • 远程代码执行(RCE)在服务器端。
  • 前端逻辑篡改,如绕过权限检查。

防护措施

  • 避免不安全合并:使用Object.assign代替深合并;或库如lodash的safeMerge。
  • 冻结原型Object.freeze(Object.prototype)防止修改。
  • 输入验证:严格校验用户输入,避免动态键(如delete obj['proto'])。
  • 更新依赖:定期npm audit,升级漏洞库。

5. 其他常见问题与通用防护

除了上述,供应链攻击(Supply Chain Attack,如恶意npm包)和内容嗅探(Content Sniffing)也值得注意。

通用防护措施

措施类型 具体方法 适用场景
内容安全策略(CSP) 限制资源加载来源 XSS、Clickjacking
子资源完整性(SRI) 防止CDN篡改
HTTPS 强制加密传输 防中间人攻击
输入验证与转义 前后端双重校验 所有用户输入
监控与审计 使用Sentry/BugSnag监控异常 实时检测攻击

结语

前端安全并非孤立存在,它与后端、浏览器生态紧密相关。开发者应遵循“防御纵深”原则,从代码编写到部署全程考虑安全。推荐参考OWASP Top 10和MDN安全文档,进行定期渗透测试。最终,安全是动态过程,随着Web3和PWA的兴起,新挑战如WebAssembly漏洞将涌现——保持学习是关键。通过这些措施,你的Web应用将更robust,保护用户免受威胁。

一键生成专业 README: 模板 + badges + shields.io + 动态内容(badges、visitors count)

一键生成“专业级” README 的时代已经到来。
2026 年,你不再需要从零手写一堆 Markdown + 手动改 badges。借助现成模板 + Shields.io + 动态统计服务 + 生成器工具,5 分钟就能做出高颜值、可维护、实时更新的 README。

这一期我们一步步教你从模板起步 → 加 badges → 加动态内容的全流程。最终效果:

  • 视觉炸裂(badges 整齐排列)
  • 数据实时(stars、forks、visitors、stats)
  • 一键复制粘贴

一、先选一个强力 README 模板(2026 年主流推荐)

最受欢迎、star 最高的模板仍是 othneildrew/Best-README-Template(10w+ stars,常年更新):

核心结构(复制这个框架,然后填空):

# 项目名称

一句话描述 + 徽章区

## 目录

- [关于项目](#关于项目)
- [内置功能](#内置功能)
- [快速开始](#快速开始)
- [使用示例](#使用示例)
- [路线图](#路线图)
- [贡献](#贡献)
- [许可](#许可)
- [联系方式](#联系方式)
- [致谢](#致谢)

## 关于项目

![项目截图](images/screenshot.png)

项目背景、解决问题、核心特性、技术栈...

### 内置功能

- 功能1
- 功能2

### 用到的技术栈

- [![Next.js][Next.js]][Next-url]
- [![React][React.js]][React-url]

...

## 快速开始

### 前置要求

- Node.js 20+
- pnpm / yarn

### 安装

```bash
git clone https://github.com/username/repo.git
cd repo
pnpm install

运行

pnpm dev

...

贡献

欢迎 PR!请阅读 CONTRIBUTING.md

许可

Distributed under the MIT License. See LICENSE for more information.

为什么这个模板好?

  • 结构清晰、章节齐全
  • 支持多语言(可加中文版)
  • 徽章区预留位置
  • 易扩展(加 mermaid 图、alerts 等)

其他备选(如果你是个人 profile 或特定类型项目):

  • rahuldkjain/gh-profile-readme-generator(在线一键生成 profile README)
  • durgeshsamariya/awesome-github-profile-readme-templates(海量美化模板)

二、Shields.io Badges 终极用法(静态 + 动态)

Shields.io 是 2026 年 badges 的王者:支持静态、动态、endpoint、JSON 等。

常用静态 badges(复制即用)

[![GitHub stars](https://img.shields.io/github/stars/username/repo?style=social)](https://github.com/username/repo/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/username/repo?style=social)](https://github.com/username/repo/network/members)
[![GitHub license](https://img.shields.io/github/license/username/repo)](https://github.com/username/repo/blob/main/LICENSE)
[![npm version](https://img.shields.io/npm/v/package-name)](https://www.npmjs.com/package/package-name)
[![GitHub last commit](https://img.shields.io/github/last-commit/username/repo)](https://github.com/username/repo/commits/main)

推荐一排 badges 布局(放标题下):

<p align="center">
  <a href="https://github.com/username/repo/stargazers"><img src="https://img.shields.io/github/stars/username/repo?style=flat-square&logo=github" alt="Stars"/></a>
  <a href="https://github.com/username/repo/network/members"><img src="https://img.shields.io/github/forks/username/repo?style=flat-square&logo=github" alt="Forks"/></a>
  <a href="https://github.com/username/repo/issues"><img src="https://img.shields.io/github/issues/username/repo?style=flat-square" alt="Issues"/></a>
  <a href="https://github.com/username/repo/blob/main/LICENSE"><img src="https://img.shields.io/github/license/username/repo?style=flat-square" alt="License"/></a>
</p>

动态 badges 进阶(用 shields.io endpoint 或第三方服务):

  • GitHub stats:anuraghazra/github-readme-stats(超级流行)

    ![Anurag's GitHub stats](https://github-readme-stats.vercel.app/api?username=yourusername&show_icons=true&theme=radical)
    ![Top Langs](https://github-readme-stats.vercel.app/api/top-langs/?username=yourusername&layout=compact)
    
  • Visitors count(访客计数)——2026 年常用服务:

    示例:

    ![Visitors](https://profile-counter.glitch.me/_Kurl_/count.svg)
    

三、一键生成工具(真正“一键”)

推荐在线生成器(2026 年最省事):

  1. rahuldkjain/gh-profile-readme-generator

    • rahuldkjain.github.io/gh-profile-…
    • 支持:skills、social links、badges、stats cards、visitors count、动态 GitHub stats
    • 选模板 → 填信息 → 复制 Markdown 一键粘贴
  2. profile-readme-generator.com

    • 类似,但 UI 更现代,支持更多动态元素
  3. 手动 + GitHub Actions 自动化(高级):

    • 用 Dynamic Badges Action 更新 gist 中的 JSON,然后 shields.io 拉取
    • 但对大多数人来说,生成器就够了

四、完整专业 README 示例片段(复制改用户名即可)

<h1 align="center">项目名称 🚀</h1>

<p align="center">
  <img src="https://profile-counter.glitch.me/_Kurl_/count.svg" alt="访客数" />
  <a href="https://github.com/username/repo/stargazers"><img src="https://img.shields.io/github/stars/username/repo?style=flat-square&logo=github" alt="Stars"/></a>
  <a href="https://github.com/username/repo/network/members"><img src="https://img.shields.io/github/forks/username/repo?style=flat-square&logo=github" alt="Forks"/></a>
</p>

<p align="center">
  <img src="https://github-readme-stats.vercel.app/api?username=yourusername&show_icons=true&theme=dracula" alt="GitHub Stats" />
</p>

## 关于项目

一句话 slogan + 核心价值

![Demo GIF](demo.gif)

## 快速开始

...

小技巧

  • <p align="center"> 居中 badges
  • 主题用 theme=dracula / radical / tokyonight 等(github-readme-stats 支持 20+ 主题)
  • 动态内容每刷新 README 都会更新(GitHub 缓存 ~1h)
❌