如何在Node.js中获取URL中#后的access_token参数
如何在Node.js/Express中获取URL哈希(#)后的access_token参数
你当前的代码尝试通过req.query["#access_token"]获取URL哈希后的参数,但这行不通——浏览器不会将URL中#之后的哈希片段发送到服务器,所以后端的req.query里根本不会包含这部分数据。比如你提供的URLexample.com/#access_token=asdad32423&somethingelse=1232,服务器收到的请求路径只有/,完全看不到#后的内容。
解决方案
哈希片段仅存在于浏览器端,必须先在前端解析这部分参数,再传递给后端(如果需要后端处理的话)。
步骤1:前端解析哈希参数
通过浏览器的window.location.hash获取哈希部分,再解析为键值对:
// 前端页面中的脚本(比如内嵌在HTML的<script>标签) function parseHashParams() { // 去掉哈希开头的#字符 const hashContent = window.location.hash.slice(1); // 用URLSearchParams解析参数 const params = new URLSearchParams(hashContent); const accessToken = params.get('access_token'); // 将解析到的token传给后端 fetch('/save-token', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ accessToken }), }) .then(res => res.json()) .then(data => console.log('Token处理完成:', data)) .catch(err => console.error('请求出错:', err)); } // 页面加载时执行解析逻辑 window.onload = parseHashParams;
步骤2:后端接收并处理参数
修改你的Express代码,添加POST接口接收前端传递的token,同时修复原代码中遗漏的express引入问题:
const express = require("express"); const cookieParser = require("cookie-parser"); const app = express(); const port = 4000; // 解析JSON格式的请求体 app.use(express.json()); app.use(cookieParser()); // 返回包含前端脚本的页面(根据实际路径调整) app.get("/", (req, res) => { res.sendFile(__dirname + '/index.html'); }); // 接收前端传递的token并写入cookie app.post("/save-token", (req, res) => { const accessToken = req.body.accessToken; if (accessToken) { // 建议添加httpOnly属性提升cookie安全性 res.cookie("access_token", accessToken, { httpOnly: true, maxAge: 3600000 }); res.json({ success: true, message: 'Token已存入cookie' }); } else { res.status(400).json({ success: false, message: '未获取到access_token' }); } }); app.listen(port, () => { console.log(`服务运行在端口 ${port}`); });
额外提示
如果你的场景是OAuth授权回调,部分服务提供商支持通过设置response_mode=query,让access_token通过?后的URL参数返回,这种情况下后端可以直接用req.query.access_token获取,无需前端中转。
内容的提问来源于stack exchange,提问作者mmz
相关产品推荐
相关产品推荐

