本文将演示如何使用 Next.js (App Router) + Tailwind CSS 作为前端,以及 Go + Gin 作为后端,完成 Google OAuth2.0 登录并在前端展示用户信息。
参考官方文档: https://developers.google.com/identity/protocols/oauth2/web-server?hl=zh-cn#libraries
示例代码已上传至GIthub仓库: https://github.com/x-mingg/google-oauth
前置准备
- Node.js 18+ / npm
- Go 1.21+
- Google Cloud Platform 账号
在 Google Cloud Console 的操作
创建新项目

图片1:创建新项目截图进入OAuth授权页面

图片2:启用 API 截图配置 OAuth 同意屏幕(填写应用名称、支持邮箱等)

图片3:OAuth 同意屏幕截图配置项目

图片4:授权范围截图创建 OAuth 客户端 ID

图片5:创建客户端 ID 截图记录生成的 Client ID 和 Client Secret
添加测试账号如下图所示:
图片6:记录凭据截图
图片7:添加测试账户测试一次完整登录流程截图

图片8:完整登录流程截图
图片9:登录成功
git clone https://github.com/x-mingg/google-oauth.git
cd google-oauth
后端实现(Go + Gin)
项目位置:backend/。
1) 依赖与初始化
CodeBlock Loading...
2) 环境变量示例 .env
CodeBlock Loading...
3) 关键代码(main.go)
CodeBlock Loading...
前端实现(Next.js + Tailwind)
项目位置:frontend/。
1) 使用 create-next-app 初始化
CodeBlock Loading...
2) 环境变量(frontend/.env.local)
CodeBlock Loading...
3) 关键页面与逻辑说明:
src/app/page.tsx(主页,含登录按钮与用户展示)
CodeBlock Loading...
src/app/api/auth/callback/google/page.tsx(回调页面,接收 code 并请求后端)
CodeBlock Loading...
启动全流程
后端(在 backend/):
CodeBlock Loading...
前端(在 frontend/):
CodeBlock Loading...
常见错误与排查
- redirecturimismatch:请确保 Google Cloud Console 中的重定向 URI 与后端/前端使用的一致(
http://localhost:3000/api/auth/callback/google)。 - invalidclient / unauthorizedclient:检查 Client ID / Secret 是否正确,且 OAuth 同意屏幕已配置。
- token 相关错误:检查后端是否正确使用
config.Exchange(...),并检查系统时间是否正确(影响 token 签名验证)。
下一步改进建议
- 在后端将 Google access token 换成自有的短期 JWT,避免直接在客户端保存 Google access token。
- 实现刷新令牌(Refresh Token)以便长期登录。