如何使用 SvelteKit 和 TypeScript 将用户的公共 IP 添加到 X-Forwarded-For 标头中?

How to add a user's public IP to the X-Forwarded-For header using SvelteKit and TypeScript?

提问人:Jay0813 提问时间:9/27/2023 更新时间:10/27/2023 访问量:41

问:

我正在使用 SvelteKit 和 TypeScript 开发一个 Web 应用程序。在登录过程中,我的目标是在标头中发送登录用户的公共 IP 信息。

event.locals.clientIP = event.getClientAddress();

event.getClientAddress()只需返回本地 IP。

如何正确将登录用户的公网IP添加到X-Forwarded-For报头?

附加信息:

由于潜在的安全漏洞,我宁愿不使用外部 API 来获取公共 IP。有没有其他方法可以获取 IP?

IP 地址 sveltekit public

评论

0赞 Mikko Ohtamaa 9/27/2023
此问题缺少有关您的 Web 服务器配置的信息,并且无法回答。请编辑问题以包含所有相关详细信息。

答:

1赞 mellunar 10/27/2023 #1

可以在服务器端获取客户端 IP:

+page.server.ts:

/** @type {import('@sveltejs/kit').RequestHandler} */
export async function load(event) {
    return { ip: event.getClientAddress() };
}

并在客户端访问它:

+page.svelte:

<script lang="ts">
    import type { PageData } from './$types';
    export let data: PageData;
</script>

{#if data?.ip}
    <p>ip to test: {data.ip}</p>
{/if}

请注意,在 localhost 上运行时,你将获得本地 IP,但在部署到生产环境后,将返回用户 IP。