2013-06-21 52 views
2

我在Meteor創建自定義登錄/註冊,因爲我需要檢查電子郵件格式,更重要的是在註冊表單中添加一個recaptcha,這需要客戶的IP。在Meteor創建用戶時獲取客戶端IP

所以我打算驗證Accounts.validateNewUser驗證碼,但我無法弄清楚如何獲取客戶端的IP在這裏。 我讀了answer關於如何做到這一點,但它不是我想要的地方。我檢查了包含服務器上所有會話/套接字的Meteor.default_server.sessions。它們包含有關標頭的信息,所有套接字的ips。每個人都有有趣的東西,如:

pathname: "/sockjs/375/ibmrlwb2/xhr" 
prefix: "/sockjs" 
protocol: "xhr-polling" 
remoteAddress: "127.0.0.1" 
remotePort: 42009 

但不知道哪個插座是當前一個,我也不能確定其當前請求的IP是。

我怎樣才能知道當前的請求url到服務器?通過這個,我可以檢查服務器上的所有套接字來推斷客戶端的IP。

或者只是我怎麼才能得到服務器上的客戶端的IP?

+0

重複[如何獲取Meteor服務器中的用戶IP地址?](http://stackoverflow.com/questions/14843232/how-to-get-the-user-ip-address-in-meteor-server ) –

回答

0

獲取客戶端的ip可以使用user-status包完成。您可以使用包或查看代碼並查看它是如何完成的。

+0

感謝您的回答。我查看了代碼。實際上,我們可以在'Meteor.publish'或'Meteor.method'上下文中獲取當前用戶的套接字信息(session ....),而不是在Accounts.validateNewUser中。如果我們檢查套接字信息,我們將擁有用戶的IP地址。我採取的解決方案是:客戶端必須提供套接字ID,然後在服務器端循環訪問'Meteor.default_server.stream_server.open_sockets'來獲取正確的套接字並提取客戶端的IP。這不是一個可靠的解決方案,但可以幫助我繼續前進。 – lastid

+0

我真的不知道coffeescript,但是有什麼方法可以複製這個:'@ _session.socket.remoteAddress'在Javascipt? – Chet

+0

@Chet @只意味着'this',所以這是this._session.socket.remoteAddress,它可能具有相同的範圍問題 – Kevin