Node.js无法为访问我的网络/应用的访客找到唯一的ID

时间:2017-11-14 15:50:35

标签: node.js

我想获取用户的IP或唯一的设备ID,以便我可以允许/禁止他根据他尝试的历史记录进行注册。

因此:访客访问我的应用。 这位嘉宾登记。 我想阻止他再次注册至少两天。 但我不知道怎么办,因为他是客人。

或者,客人要求进行短信验证。 我想让他每天只做5次。

我在Google搜索了大量关于如何获取用户IP的搜索,但它没有用,我没有成功找到他的IP - 似乎太复杂或无法访问。

我试图通过npm(GitHub repo)使用UUID插件,但这为所有访问者提供了相同的UUID(可能它给了服务器的UUID或者其他东西)。

我需要一种有效的方法来做到这一点。

感谢。

1 个答案:

答案 0 :(得分:1)

我假设您正在使用express框架。

在server.js文件中添加npm模块express-session,如

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
    secret : 'yourSecretPassPhrase',
    resave: true,
    saveUninitialized: true,
    cookie : {
      maxAge : 1000 * 60 * 60 * 24 * 2 //for two days(in millisec)
    }
  })
);

此后,会在每个请求中插入会话对象!

app.get('/setUser', function(request, response){
        request.session.allowUser = true;      //creates user session
    })
);

app.get('/removeUser', function(request, response){
        del request.session.allowUser;      //deletes user session
    })
);

app.get('/checkUser', function(request, response){
        if(request.session.allowUser){
            //your code for existing or returning user
        }else{
            //your code for new user or session expired user
        }
    })
);

express-session为您处理cookie管理。

有关详细信息,请在此处查看npm doc https://www.npmjs.com/package/express-sessions

您可以从

等请求对象中获取用户的IP地址
const clientIp = request.headers['x-forwarded-for'] || request.connection.remoteAddress;

但最有可能的客户端用户将使用动态IP。所以,我建议你使用express-session npm模块,该模块使用cookie而不是ip地址跟踪用户