Meteor.js: Получите анонимных посетителей уникальный идентификатор/ip/что-то еще? - программирование
Подтвердить что ты не робот

Meteor.js: Получите анонимных посетителей уникальный идентификатор/ip/что-то еще?

Скажем, я создаю приложение, использующее meteor.js, где я просто собираю некоторые простые данные формы от пользователей. Может быть, ответ на простой вопрос или еще что-то. Им не нужно регистрироваться для отправки данных.

Как я могу защитить свое приложение от кого-то, создавшего js-loop в своей консоли Chrome, которая просто вставляет дерьмо в мою БД?


Я могу защитить удаление и обновления, выполнив следующие действия:

Formanswers.allow({
  insert: function () {
    return true;
  },
  update: function () {
    return false;
  },
  remove: function () {
    return false;
  },
});

И если пользователь вошел в систему (как вы помните, это не так в моем приложении), я мог бы отметить каждую вставку и проверить что-то вроде:

  insert: function (userId, doc) {
        if (userId && (Formanswers.findOnd({userid: userId, time: SOMETHING TIME SPECIFIC}).count() < 1)) return true;
  },

Итак, мой вопрос: есть ли другой способ получения уникальной пользовательской информации или IP-адреса или что-то для анонимного (не вошедшего в систему) пользователя, чтобы я мог выполнить вышеуказанную проверку на нем?

Спасибо!

4b9b3361

Ответ 1

Вы можете использовать метеоритный пакет.

счета-анонимным

https://github.com/tmeasday/meteor-accounts-anonymous

Итак, вы используете

Meteor.loginAnonymously();

если пользователь впервые посещает вашу страницу, и используйте .allow, чтобы проверить, что вам нужно

Ответ 2

Чтобы получить IP-адрес, обсерватория (https://github.com/jhoxray/observatory) использует это:

в кофе:

Meteor.userIP = (uid)->
  ret = {}
  if uid?
    s = ss for k, ss of Meteor.default_server.sessions when ss.userId is uid
    if s
      ret.forwardedFor = s.socket?.headers?['x-forwarded-for']
      ret.remoteAddress = s.socket?.remoteAddress
  ret

Возвращает объект типа { forwardedFor: '192.168.5.4', remoteAddress: '192.168.5.4' }

Ответ 3

Используйте ключ сеанса или localStorage. Когда посетитель подает форму, проверьте, был ли ключ установлен, и если он имеет, отклоните вставку.

Ответ 4

Вы можете сделать что-то вроде этого:

if (Meteor.isClient) {
    Meteor.startup(function () {
        Session.set('currentuser', 'something randomly generated by another function');
    }
}

и проверьте, что "currentuser" уже вставлен в вашу базу данных.