2017-10-10 83 views
1

我正在使用Firebase和react-router构建一个create-react-app。 我想集成Stripe作为支付服务提供商。使用Reactjs和Firebase获取条纹注册的用户IP

磁条验证过程的一部分,我需要提供用户同意的条款和条件的IP地址,按照菌柄docs:因为我用的火力地堡的组合

stripe.accounts.update(
    {CONNECTED_STRIPE_ACCOUNT_ID}, 
    { 
    tos_acceptance: { 
     date: Math.floor(Date.now()/1000), 
     ip: request.connection.remoteAddress // Assumes you're not using a proxy 
    } 
    } 
}); 

和反应路由器,我似乎并不像我可以使用Express(如req,res)在后端获得IP:我不认为我可以将获得的IP地址链接到用户uid。 也在试图利用这个世界的ipify在客户端上有反应,我总是使用相同的IP在生产结束(不论设备或位置)时:

import http from 'http'; 
componentDidMount() { 
    http.get({'host': 'api.ipify.org', 'port': 80, 'path': '/'}, function(resp) { 
     resp.on('data', ip => { 
     alert("My public IP address is: " + ip); 
     }); 
    }); 
    } 

任何想法如何,我可以检索用户的IP地址是通过Firebase云端功能还是直接从客户端?

谢谢

回答

1

您可以使用Firebase云功能检索客户端IP地址。 HTTP触发的云功能类似于Node/Express应用程序,它们以响应和请求参数触发。

exports.someFunctionName = functions.https.onRequest((req, res) => { 
    // ... 
}); 

考虑到这一点,你可以在此功能中实现你的条纹逻辑。

exports.someFunctionName = functions.https.onRequest((request, response) = > { 
    // ... 
    stripe.accounts.update({ 
     CONNECTED_STRIPE_ACCOUNT_ID 
     }, { 
     tos_acceptance: { 
      date: Math.floor(Date.now()/1000), 
      ip: request.ip // Assumes you're not using a proxy 
     } 
     } 
    }); 
}); 

有关如何更好地检索IP地址的更多详细信息,可以查看this answer

+0

我试过这个与云功能,但我怎么能然后链接到一个特定的用户请求(无论是条纹ID或uid),因为我不能传递任何参数到“someFunctionName”http触发器? –

+0

您可以使用GET/POST参数将任何参数传递给Http函数。有关更多信息,请阅读['fetch'文档](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) – bennygenel