如何在Firebase云功能中获取客户端IP地址?

时间:2017-12-30 10:10:35

标签: firebase ip-address google-cloud-functions

使用Firebase云功能将数据保存到Firebase数据库时,我还想写出请求来源的IP地址。

但是,req.connection.remoteAddress始终返回::ffff:0.0.0.0。有没有办法获取发出请求的客户端的实际IP地址?

5 个答案:

答案 0 :(得分:14)

编辑:这似乎已经过时了。请参阅另一个答案。

IP地址似乎可在req.headers["x-forwarded-for"]中使用。但是,我没有在文档中找到关于此的官方信息。

另请注意,如果客户本身发送,例如X-Forwarded-For: 1.2.3.4,值连接在一起:

"x-forwarded-for":"1.2.3.4, actual-client-ip-as-seen-by-google"

答案 1 :(得分:9)

客户端IP位于request.ip中。

示例:

export const pay = functions.https.onRequest((request, response) => {
  console.log(`My IP is ${request.ip}`);
});

答案 2 :(得分:4)

如果您正在通过Firebase托管寻找客户端ip,则应使用标头fastly-client-ip,其中将包含真实的客户端ip。

答案 3 :(得分:0)

如果要在云可调用函数中查找ip地址或标头,则可以在上下文对象中获取信息。

例如:

    exports.testUser = async (data, context) => {
      console.log('------------------------::context::------------------');
      if(context.rawRequest && context.rawRequest.headers){
         console.log(context.rawRequest.headers);
      }
    }

在标头中,您可以获得ip:标头{'x-appengine-user-ip':'xxip'}等。

答案 4 :(得分:0)

这对我有用:

const express = require('express');

const logIP = async (req : any, res : any, next : any) => {
    const clientIP = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.headers['fastly-client-ip'];
}

const logIPApp = express();
logIPApp.use(logIP);

exports.reportIP = functions.https.onRequest(logIPApp);