feat: add userAgent and ipAddress to HttpServer for enhanced request tracking

This commit is contained in:
Ardeman 2025-03-20 11:49:36 +08:00
parent ab3f748195
commit d65aed6828
3 changed files with 24 additions and 3 deletions

View File

@ -2,10 +2,14 @@ import xior, { merge } from 'xior'
const baseURL = import.meta.env.VITE_API_URL const baseURL = import.meta.env.VITE_API_URL
export type THttpServer = { accessToken?: string } export type THttpServer = {
accessToken?: string
ipAddress?: string | null
userAgent?: string | null
}
export const HttpServer = (parameters?: THttpServer) => { export const HttpServer = (parameters?: THttpServer) => {
const { accessToken } = parameters || {} const { accessToken, ipAddress, userAgent } = parameters || {}
const instance = xior.create({ const instance = xior.create({
baseURL, baseURL,
}) })
@ -16,6 +20,8 @@ export const HttpServer = (parameters?: THttpServer) => {
return merge(config, { return merge(config, {
headers: { headers: {
...(accessToken && { Authorization: `Bearer ${accessToken}` }), ...(accessToken && { Authorization: `Bearer ${accessToken}` }),
...(ipAddress && { 'X-Ip-Address': ipAddress }),
...(userAgent && { 'X-User-Agent': userAgent }),
}, },
}) })
}) })

View File

@ -12,6 +12,10 @@ import { NewsDetailPage } from '~/pages/news-detail'
import type { Route } from './+types/_news.detail.$slug' import type { Route } from './+types/_news.detail.$slug'
export const loader = async ({ request, params }: Route.LoaderArgs) => { export const loader = async ({ request, params }: Route.LoaderArgs) => {
const userAgent = request.headers.get('user-agent')
const ipAddress =
request.headers.get('cf-connecting-ip') ||
request.headers.get('x-forwarded-for')
const { userToken: accessToken } = await handleCookie(request) const { userToken: accessToken } = await handleCookie(request)
let userData let userData
if (accessToken) { if (accessToken) {
@ -19,7 +23,12 @@ export const loader = async ({ request, params }: Route.LoaderArgs) => {
userData = data userData = data
} }
const { slug } = params const { slug } = params
let { data: newsDetailData } = await getNewsBySlug({ slug, accessToken }) let { data: newsDetailData } = await getNewsBySlug({
slug,
accessToken,
userAgent,
ipAddress,
})
const shouldSubscribe = const shouldSubscribe =
(!accessToken || userData?.subscribe?.subscribe_plan?.code === 'basic') && (!accessToken || userData?.subscribe?.subscribe_plan?.code === 'basic') &&
newsDetailData?.is_premium newsDetailData?.is_premium

View File

@ -7,12 +7,18 @@ import { handleCookie } from '~/libs/cookies'
import type { Route } from './+types/actions.log.ads.$id' import type { Route } from './+types/actions.log.ads.$id'
export const action = async ({ request, params }: Route.ActionArgs) => { export const action = async ({ request, params }: Route.ActionArgs) => {
const userAgent = request.headers.get('user-agent')
const ipAddress =
request.headers.get('cf-connecting-ip') ||
request.headers.get('x-forwarded-for')
const { userToken: accessToken } = await handleCookie(request) const { userToken: accessToken } = await handleCookie(request)
const { id } = params const { id } = params
try { try {
const { data: logsData } = await createLogAdsRequest({ const { data: logsData } = await createLogAdsRequest({
id, id,
accessToken, accessToken,
userAgent,
ipAddress,
}) })
return data( return data(