Можно ли передавать клиенту токен и client_id при использовании Channel API? - PullRequest
1 голос
/ 23 февраля 2012

Мне нужно создать приложение, в котором сервер GAE будет всегда общаться только с одним клиентом (то есть одно сообщение всегда должно отправляться только одному клиенту).

Я делаю следующее -

Python:

def get(self):
    # generate token, when page is loaded
    client_id = uuid.uuid4().hex
    token = channel.create_channel(client_id)
    template_values = {'token': token,
                       'client_id': client_id
                       }
    self.response.out.write(template.render('page.html', template_values))

def post(self):
    # reply to the client
    ... 
    client_id = self.request.get('id')
    channel.send_message(client_id, message)

Javascript:

sendMessage = function(field) {
  $.ajax({
    type: "POST",
    url: "/",
    data: "f=" + field + "&id=" + "{{ client_id }}", // WARNING!
    contentType: "application/x-www-form-urlencoded",
    success: function(data) {
    }
  });          
};

onOpened = function() {
  connected = true;
  sendMessage('opened');
};
onMessage = function(msg) {
  alert(msg.data);
};
onError = function(err) {
  alert(err);
};        
onClose = function() {
  alert("close");
};        
// open new session
channel = new goog.appengine.Channel('{{ token }}'); // WARNING!
socket = channel.open();
socket.onopen = onOpened;
socket.onmessage = onMessage;
socket.onerror = onError;
socket.onclose = onClose;

Работает хорошо, но при таком сценарии token и client_id передаются клиенту.Это нормально?

1 Ответ

0 голосов
/ 24 февраля 2012

Нет технической причины не делать этого. Если вы беспокоитесь о безопасности, токен гораздо более ценен: злоумышленник, который может прослушивать ваш трафик, может взять токен и прослушать сообщения канала в другом контексте. Клиенты не позволят им сделать это.

Но у меня есть вопрос: почему бы не вернуть сообщение в ответе POST, а не отправить сообщение по каналу? Или пример кода просто упрощен для примера?

...