如何在Nextjs的API路由中设置刷新令牌



我正在使用刷新令牌构建配置文件更新功能,并通过API路由与Next.js中的代理中间件转发对API的调用:

——比;更新配置文件请求——比;<<strong> API路线/strong>(实现代理中间件将请求转发到API服务器)——>API服务器(用响应刷新令牌发送回API路由)——>设置API路由中的刷新令牌

以上是我期望的路线图,我想在API路由中设置来自API服务器的刷新令牌当刷新令牌包含在响应数据中,但我不知道如何访问API路由中的响应数据以获得刷新令牌并将其设置为cookie。我该怎么做呢?

下面是我的代码:

/页面/api/路径[…]. js(api路线)

import httpProxyMiddleware from 'next-http-proxy-middleware';
export const config = {
api: {
// Enable `externalResolver` option in Next.js
externalResolver: true,
bodyParser: false,
},
};
const handler = async (req, res) => {
// I want access to response data in `res` variable to get refresh token and set it to cookie
const cookie = parseCookies({ req });
if (req.headers.cookie && cookie) {
req.headers.Authorization = `Bearer ${cookie['access_token']}`;
}
httpProxyMiddleware(req, res, {
target: 'http://api.my-server-api.com',
ws: true,
secure: process.env.NODE_ENV === 'production',
selfHandleResponse: false,
changeOrigin: true,
headers: {
cookie: '', // remove cookie value
},
});
};
export default handler;

如果你想在接收到代理后处理你自己的响应,你可以使用selfhandlerresponse。正如你在下面看到的,如果你使用这个选项,你可以拦截和读取代理代理,但你也必须确保回复代理代理本身,否则原始客户端将永远不会收到任何数据。

代码:

const handleProxyInit = (proxy) => {
proxy.on('proxyRes', (proxyRes, req, res) => {
let body = [];
proxyRes.on('data', function (chunk) {
body.push(chunk);
});
proxyRes.on('end', function () {
body = Buffer.concat(body).toString();
console.log('res from proxied server:', JSON.parse(body));
res.end('my response to cli');
});
});
};
httpProxyMiddleware(req, res, {
// You can use the `http-proxy` option
target: process.env.SERVER_HOST,
ws: true,
secure: process.env.NODE_ENV === 'production',
selfHandleResponse: true,
changeOrigin: true,
headers: {
cookie: '', // remove cookie value
},
onProxyInit: handleProxyInit,
});

希望有帮助!

最新更新