浏览器的 localstorage 完全运行在客户端,无法被 go 服务端直接访问;必须通过 http 请求头(如 authorization)或 cookie 显式传递 token,服务端才能接收、解析和验证。
在 Go Web 开发中,一个常见误区是认为后端能“主动读取”前端浏览器的 localStorage 或 sessionStorage。这是不可能的——它们是纯客户端 JavaScript API,运行在沙盒化的浏览器环境中,不参与 HTTP 协议传输,服务端(包括 Go 的 http.Handler)在任何阶段都无法直接访问这些存储。
要让 Go 后端使用前端持有的 JWT,必须由前端显式发送该 Token。主流做法有两种:
前端在发起 API 请求(如 fetch 或 axios)时,手动将 Token 注入请求头:
// 前端示例(JavaScript)
const token = localStorage.getItem('auth_token');
fetch('/api/profile', {
headers: {
'Authorization': `Bearer ${token}`
}
});Go 后端则从 r.Header.Get("Authorization") 提取并解析:
func protectedHandler(w http.ResponseWriter, r *http.Request) {
authHeader := r.Header.Get("Authorization")
if authHeader == "" {
http.Error(w, "Missing token", http.StatusUnauthorized)
return
}
// 提取 Bearer token
var tokenString string
if strings.HasPrefix(authHeader, "Bearer ") {
tokenString = authHeader[7:]
} else {
http.Error(w, "Invalid auth header format", http.StatusUnauthorized)
return
}
// 使用 github.com/golang-jwt/jwt/v5 验证
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return []byte("your-secret-key"), nil // 生产环境请使用 RSA 或安全密钥管理
})
if err != nil || !token.Valid {
http.Error(w, "Invalid token", http.StatusUnauthorized)
return
}
// Token 有效,渲染受保护内容
tmpl.Execute(w, map[string]interface{}{"User": "Alice"})
}若你使用 Go 渲染 HTML(服务端渲染),可让前端在登录后将 JWT 写入 httpOnly: false 的 Cookie,并配合签名/加密保障完整性:
// Go 后端设置带签名的 Cookie(使用 gorilla/securecookie)
var s = securecookie.New(
securecookie.GenerateRandomKey(32), // hash key
securecookie.GenerateRandomKey(32), // block key(启用 AES 加密时需要)
)
func loginHandler(w http.ResponseWriter, r *http.Request) {
// ...验证用
户凭据后生成 JWT
jwtToken := generateJWT(user)
// 将 JWT 存入加密 Cookie(客户端可读,但不可篡改)
encoded, err := s.Encode("token", map[string]string{"jwt": jwtToken})
if err == nil {
http.SetCookie(w, &http.Cookie{
Name: "auth",
Value: encoded,
Path: "/",
HttpOnly: false, // 允许 JS 读取(以便后续请求携带)
Secure: true, // 仅 HTTPS
SameSite: http.SameSiteLaxMode,
})
}
}前端可通过 document.cookie 读取并用于后续请求(或直接由浏览器自动携带)。
总之:不是“能不能”,而是“怎么传”。设计清晰的前后端协作契约(Token 放 Header 或 Signed Cookie),比试图突破同源限制更安全、更可持续。
# javascript
# java
# redis
# html
# js
# 前端
# git
# go
# github
# cookie
# golang
相关文章:
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
建站之星展会模板:智能建站与自助搭建高效解决方案
小型网站制作HTML,*游戏网站怎么搭建?
如何登录建站主机?访问步骤全解析
如何快速搭建高效WAP手机网站吸引移动用户?
建站之星如何保障用户数据免受黑客入侵?
定制建站流程解析:需求评估与SEO优化功能开发指南
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
网站制作难吗安全吗,做一个网站需要多久时间?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何在Golang中使用replace替换模块_指定本地或远程路径
安云自助建站系统如何快速提升SEO排名?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
如何高效利用200m空间完成建站?
定制建站策划方案_专业建站与网站建设方案一站式指南
建站主机解析:虚拟主机配置与服务器选择指南
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何彻底卸载建站之星软件?
建站主机选购指南与交易推荐:核心配置解析
广州营销型建站服务商推荐:技术优势与SEO优化解析
建站之星IIS配置教程:代码生成技巧与站点搭建指南
开封网站制作公司,网络用语开封是什么意思?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Bpmn 2.0的XML文件怎么画流程图
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何通过老薛主机一键快速建站?
建站上市公司网站建设方案与SEO优化服务定制指南
建站之星后台密码如何安全设置与找回?
南京网站制作费用,南京远驱官方网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
个人摄影网站制作流程,摄影爱好者都去什么网站?
c# 服务器GC和工作站GC的区别和设置
外贸公司网站制作,外贸网站建设一般有哪些步骤?
建站与域名管理如何高效结合?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何基于云服务器快速搭建网站及云盘系统?
高端建站如何打造兼具美学与转化的品牌官网?
焦点电影公司作品,电影焦点结局是什么?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
SQL查询语句优化的实用方法总结
建站之星安装步骤有哪些常见问题?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
建站之星3.0如何解决常见操作问题?
如何通过虚拟机搭建网站?详细步骤解析
建站之星代理商如何保障技术支持与售后服务?
*请认真填写需求信息,我们会在24小时内与您取得联系。