8

Meteor에서 관찰 해본 더 혼란스러운 측면 중 하나는 세션이 새로 고침 될 때마다 정리된다는 것입니다. 그것은 영구 저장소가 아니기 때문에 어디에서 사용자 ID를 넣을 것인가, 또는 사람들이 내 응용 프로그램의 상태 시스템에 어디에 놓을 것입니까?Meteor의 지속적인 세션

이러한 시나리오의 패턴은 무엇입니까?

답변

3

글쎄, 처음에는 유성 built in Auth을 사용하여 사용자 ID를 저장하려고합니다. 그들은 기본적으로 로컬 저장소를 사용하고 있습니다.하지만 AFAIK에는 쉽게 접근 할 수있는 방법이 없습니다.

그러나 새로 고침 할 때 물건을 생존 시키려면 mongo에 저장하거나 URL을 사용하여 '상태 시스템'에 표시해야한다고 생각했을 것입니다. 부트 스트랩 라우터 (예 :)를 사용하여 pushState을 사용하여 URL을 변경할 수 있습니다.

9

실제로 당신이 할 수있는 일은 set()이 호출 될 때 Amplify의 로컬 스토리지에 값을 저장하는 Session의 "서브 클래스"를 만드는 것입니다. Session의 모든 반응 특성을 자동으로 상속받습니다. 여기에 코드입니다, 그것은 나를 위해 일한 :

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); 
    }, 
}); 

그냥 SessionAmplify.set/얻을 통화와 모든 Session.set/얻을 전화를 교체합니다. set()이 호출되면 부모 Session 메서드가 호출되고 amplify.store()도 호출됩니다. "서브 클래스"가 처음 만들어지면, 그것은 amplify의 저장소에있는 모든 것을 그 키 안에로드하여 get()으로 즉시 검색 할 수있게합니다. https://github.com/sebastienbarre/meteor-leaderboard

+1

니스 :

당신은 여기에 리더 예제의 작업 변화를 테스트 할 수 있습니다. 나는 이것을 다른 것으로 찾았지만 완전히이 아이디어를 사용할 것입니다. 고마워, 세바스찬! –

+0

+1,이 작품은 아름답게 작동합니다. – danii