8

Donc, l'un des aspects les plus confus que j'ai observé avec Meteor est que les sessions sont effacées chaque rafraîchissement. Comme ce n'est pas un magasin persistant, où devrais-je mettre des choses comme userid, ou où les gens sont dans la machine d'état de mon application?Sessions persistantes dans Meteor

Quels sont les modèles de ces scénarios?

Répondre

3

Eh bien, pour commencer, j'utiliserais les météores built in Auth pour stocker userID. Ils utilisent le stockage local par défaut, je pense, mais je pense qu'il n'y a pas de moyen facile d'y accéder.

Cependant, j'aurais pensé que si vous voulez que les choses survivent à travers les actualisations, vous devriez soit les stocker dans mongo ou utiliser l'URL pour indiquer où elles se trouvent dans la machine d'état. Vous pouvez utiliser le routeur bootstrap (par exemple) pour utiliser pushState pour changer l'URL.

9

En fait ce que vous pourriez faire est de créer une "sous-classe" de Session qui stocke la valeur dans le stockage local d'Amplify quand set() est appelé. Vous héritez automatiquement de toutes les propriétés réactives de Session. Voici le code, il a fonctionné pour moi:

SessionAmplify = _.extend({}, Session, { 
    keys: _.object(_.map(amplify.store(), function(value, key) { 
    return [key, JSON.stringify(value)] 
    })), 
    set: function (key, value) { 
    Session.set.apply(this, arguments); 
    amplify.store(key, value); 
    }, 
}); 

Juste tous vos remplacer Session.set/recevoir des appels avec SessionAmplify.set/recevoir des appels. Lorsque set() est appelée, la méthode de session parente est appelée, de même que amplify.store(). Lorsque la "sous-classe" est créée, elle charge tout ce qui se trouve dans le magasin d'amplify à l'intérieur de ses clés, de sorte qu'elles peuvent être récupérées immédiatement avec get().

Vous pouvez tester une variation de travail de l'exemple Leaderboard ici: https://github.com/sebastienbarre/meteor-leaderboard

+1

Nice. J'ai trouvé cela pour autre chose, mais je vais totalement utiliser cette idée. Merci, Sébastien! –

+0

+1, cela fonctionne magnifiquement – danii

Questions connexes