2013-07-17 2 views
1

Я использую Meteor 0.6.3.1 и импровизировал свою собственную пользовательскую систему (на самом деле не пользовательскую систему, но я думал, что могу использовать переменную userId, так как никто другой возложила на него претензию.)Meteor.userInd не сохраняется, когда я обновляю страницу

Проблема в том, что переменная не сохраняется.

У меня есть этот код

Meteor.methods({ 
    'initCart': function() { 
     console.log(this.userId); 

     if(!this.userId) { 
      var id = Carts.insert({products: []}); 

      this.setUserId(id); 
      console.log("cart id " + id + " assigned"); 
     } 

     return this.userId; 
    } 
}); 

Суть в том, вы должны быть в состоянии переключать страницы, но по-прежнему использовать ту же корзину.

Я не могу использовать Sessions, так как они на сторону клиента и могут привести к утечкам информации между пользователями ..

Как я должен идти об этом? Есть ли что-то вроде Amplify для серверной Meteor?

+0

«утечки информации между пользователями» - Как вы определяете «пользователи»? Кажется, что у вас есть корзина, связанная с текущим подключением. Как вы хотите, чтобы он себя вел? – Xyand

ответ

2

От Метеор документы:

setUserId не имеет обратной силы. Он влияет на текущий вызов метода и любой будущий метод вызывает соединение . Любой предыдущий метод вызывает по адресу . Это соединение будет по-прежнему видеть значение userId, которое было в эффекте при их запуске.

При обновлении создайте новое . В этом соединении вы входите в систему, используя файл cookie, хранящийся в пользовательской системе на стороне клиента.

Вы можете хранить идентификатор корзины в печенье ...

+0

Нет, на самом деле это не так. Кроме того, cookie не работает в Meteor? –

+0

Cookies действительно работают. Я думаю, что смогу вам помочь, но, пожалуйста, будьте более конкретными в отношении желаемого поведения. См. Мой комментарий к исходному вопросу. – Xyand

+0

Извините за плохой ответ во время этого вопроса, @Xyand, я был довольно смущен тем, что делал Метеор. Проблема оказалась в том, что если вы не используете пакет Meteor Auth, переменная userId никогда не будет установлена. Поэтому я постоянно пытался получить доступ к неопределенной переменной. Спасибо за помощь! –

-1

Это работает для меня:

# server/methods/app.coffee 
#--------------------------------------------------- 
# Info found in Meteor documentation (24 Feb. 2015) 
# 
# > Currently when a client reconnects to the server 
# (such as after temporarily losing its Internet connection), 
# it will get a new connection each time. The onConnection callbacks will be called again, 
# and the new connection will have a new connection id. 
# > In the future, when client reconnection is fully implemented, 
# reconnecting from the client will reconnect to the same connection on the server: 
# the onConnection callback won't be called for that connection again, 
# and the connection will still have the same connection id. 
# 
# In order to avoid removing data from persistent collections (ex. cartitems) associated with client sessionId (conn.id), at the moment we'll implement the next logic: 
# 
# 1. Add the client IP (conn.clientAddress) to the cartitems document (also keep the conn.id) 
# 2. When a new connection is created, we find the cartitems associated with this conn.clientAddress and we'll update (multi: true) the conn.id on the all cartitems. 
# 3. Only remove the cartitems associated with the conn.id after 10 seconds (if in this time the customer reconnect, the conn.id will have been updated at the point #2. we avoid this way removing after refresh the page for example. 
# 4. After 10 seconds (ex. the user close the window) we'll remove the cartitems associated with the conn.id that it has been closed. 

Meteor.onConnection (conn) -> 
    CartItems.update({clientAddress: conn.clientAddress}, {$set: {sessionId: conn.id}}, {multi: true}) 
    conn.onClose -> 
    Meteor.setTimeout -> 
     CartItems.remove {sessionId: conn.id} 
    , 10000 

Meteor.methods 
    getSessionData: -> 
    conn = this.connection 
    {sessionId: conn.id, clientAddress: conn.clientAddress} 
Смежные вопросы