2012-09-19 43 views
10

मेरे पास एक कंपोज़र ऐप है जो वर्तमान उपयोगकर्ता से जुड़े ओथ टॉक को स्टोर करने के लिए रिंग सत्र रैपर का उपयोग करता है। जब सर्वर पुनरारंभ होता है तो मैं इस टोकन को उपलब्ध रहने के लिए चाहूंगा, ताकि मुझे प्रत्येक बार ऑथ प्रक्रिया से गुजरना पड़े।कंपोज़र/रिंग: कुकी-स्टोर के साथ कोई सत्र सर्वर को पुनरारंभ क्यों नहीं करता है?

मुझे लगता है कि डिफ़ॉल्ट मेमोरी-स्टोर की बजाय कुकी-स्टोर का उपयोग करने में मदद मिलेगी, लेकिन ऐसा नहीं है। मैं क्या खो रहा हूँ?

(defn auth-callback-handler 
    [session {code :code}] 
    (let [token (retrieve-token code)] 
    (-> (redirect "/") (assoc :session (assoc session :token token))))) 

(defroutes app-routes 
    (GET "/" {session :session} (root-handler session)) 
    (GET "/auth-callback" {session :session params :params} (auth-callback-handler session params)) 
    (route/not-found "Not Found")) 

(def app 
    (-> (handler/site app-routes) 
     (wrap-session {:store (cookie-store {:key "a 16-byte secret"})}))) 

समारोह root-handler अगर किसी में हो या ना किया है तय करने के लिए टोकन का उपयोग करता है, लेकिन सत्र की जानकारी के रास्ते में कुछ भी वापस नहीं करता है:

इस कोड के प्रासंगिक हिस्सा है।

उत्तर

11

समस्या यह है कि आपके पास आपके ऐप में रैप-सत्र मिडलवेयर हैं, क्योंकि हैंडलर/साइट एक के साथ आता है। यह एन्क्रिप्ट/डिक्रिप्ट को दो बार चलाने का कारण बन रहा है।

https://github.com/sritchie/couch-session

https://github.com/wuzhe/clj-redis-session

https://github.com/rmarianski/servlet-session-store:

(def app 
    (site app-routes {:session {:store (cookie-store {:key "a 16-byte secret"})}})) 

इसके अलावा, शायद आप इन परियोजनाओं, जो अंगूठी SessionStore प्रोटोकॉल लागू में से कुछ पर रुचि होगी: compojure सत्र संभाल उपयोग कॉन्फ़िगर करने के लिए

अंतिम एक लगातार बनाने के लिए आपको सी की आवश्यकता होगी पसंद के अपने सर्वलेट कंटेनर के प्रलेखन बिल्ली।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^