Get the client IP on NextJS and use SSR

13.6k views Asked by At

I'm making a weather app, and I get the client IP with IPIFY, but this loses SSR, or I use SSR and I get the server IP. Someone told me that I could use the header x-forwarded-for and then, with this value, make the weather API call with SSR.

The problem is I'm using only nextjs, no backend here, and second, I don't know how to call or use x-forwarded-for in the front to get the client IP.

  1. Is this possible?

  2. How I can implement that?

I'm using vercel to deploy the app.

3

There are 3 answers

0
Diogo Capela On

Updated answer as request.connection is deprecated since Node.js v13.0.0. So we should now use request.socket instead.

export const getServerSideProps = async ({ req }) => {
  const forwarded = req.headers['x-forwarded-for'];

  const ip = typeof forwarded === 'string' ? forwarded.split(/, /)[0] : req.socket.remoteAddress;

  console.log(ip);

  return {
    props: { ip },
  };
};
1
Ryan W On

I think you can get them through getServerSideProps.

export async function getServerSideProps({ req }) {
  console.log(req.headers) //see if you have those headers
  return {
    props: {
      headers
    },
  }
}

function Page({ headers }) {
  // Render data...
}
0
Merlo On

Here you go:

export async function getServerSideProps({ req }) {
  const forwarded = req.headers["x-forwarded-for"]
  const ip = forwarded ? forwarded.split(/, /)[0] : req.connection.remoteAddress
  return {
    props: {
      ip,
    },
  }
}