2015-11-22 12 views
11

मैं डेटाबेस में सत्र संग्रह/तालिका का उपयोग किए बिना Passport.js के लिए ट्विटर रणनीति का उपयोग करने का एक तरीका ढूंढ रहा हूं। इसका कारण यह है कि हम सत्र संग्रह में उस डेटा को सहेजते हैं जो काफी बड़ा हो सकता है और जब भी कोई उपयोगकर्ता अनुरोध करता है तो हम डेटाबेस राउंडट्रिप को सहेजते हैं क्योंकि हमें सत्र डेटा लाने के लिए हर बार डीबी में जाना नहीं पड़ता है।पासपोर्ट टोकन ऑथ * बिना डेटाबेस डेटाबेस

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

लेकिन मैं उलझन में हूँ क्यों वहाँ नहीं है एक:

वैसे भी, हम, एक उपयोगकर्ता को प्रमाणित करने के लिए एक टोकन (JSON वेब टोकन) का उपयोग करने के लिए बस कैसे इस महान आलेख वर्णन करता है सक्षम होना चाहिए पासपोर्ट के साथ ऐसा करने का आसान तरीका? (लेख पासपोर्ट के बिना सबकुछ करता है - लेकिन निश्चित रूप से पासपोर्ट ने इसे कवर किया है?)।

शायद मैं इस पर विचार कर रहा हूं और ऐसा करने का तरीका सिर्फ डीबी सत्र का उपयोग करने के लिए एक्सप्रेस में कॉल को छोड़ना है और फिर पासपोर्ट पहले से ही जेडब्ल्यूटी को संभालने के लिए पर्याप्त स्मार्ट है? किसी भी तरह मुझे शक है।

उदाहरण के लिए, यह निश्चित रूप से नहीं पर्याप्त बस अपना एक्सप्रेस सर्वर में इस कोड को बाहर टिप्पणी करने के लिए है:

//app.use(expressSession({ 
// secret: 'arrete_x_paulette', 
// store: new MongoStore({mongooseConnection: mongoose.connection}), 
// saveUninitialized: true, 
// resave: true, 
// cookie: { 
//  secure: false, 
//  maxage: 6000000 
// }, 
// proxy: false 
//})); 

और

//app.use(passport.session()); 

तो क्या है पर्याप्त, पासपोर्ट का उपयोग कर?

कोई भी जेडब्ल्यूटी आधारित ऑथ का उपयोग करके डीबी में संग्रहीत सत्रों का उपयोग क्यों करेगा?

+1

अगर कोई इसका जवाब दे तो मैं बहुत सराहना करता हूं। मेरे पास भी वही प्रश्न है। –

+0

एक बक्षीस शुरू करना चाहते हैं या मुझे डुबकी लेनी चाहिए? –

+0

@ChaseIsley मुझे लगता है कि मैंने इसे समझ लिया है, मुझे लगता है कि आपको जो करना है वह मोंगोस्टोर भाग या एक्सप्रेस सत्र विकल्पों पर टिप्पणी कर रहा है, तो यह केवल कुकी –

उत्तर

4

अद्यतन: बेहतर समाधान सत्रों को अक्षम करना है।

मुझे लगता है कि { session: false } को पर पास करके पासपोर्ट के लिए सत्र मिडलवेयर को हटाने और अक्षम करने के लिए इसे docs देखें।

विचार यह है कि सत्र डेटा टोकन के अंदर संग्रहीत किया जाता है, इसलिए आपको सत्र की आवश्यकता नहीं है। इसे स्मृति में संग्रहीत करना (जैसा कि नीचे वर्णित है) केवल स्मृति को बर्बाद कर रहा है। कुकीज़ क्लाइंट-साइड में इसे संग्रहीत करना भी अच्छा नहीं है, क्योंकि ग्राहक को यह तय करना चाहिए कि टोकन को स्टोर करना है, न कि सर्वर।

app.use(expressSession({ 
    secret: 'arrete_x_paulette', 
    saveUninitialized: true, 
    resave: true, 
    cookie: { 
     secure: false, 
     maxage: 6000000 
    }, 
    proxy: false 
})); 
:


तुम सिर्फ इन-स्मृति और यदि आप मानक expressjs के सत्र का उपयोग कर रहे सत्र को संभालने के लिए express.js सत्र रखने के लिए चाहते हैं, तो आप सभी की जरूरत store: new MongoStore(...) लाइन को हटाने के लिए है

डिफ़ॉल्ट रूप से यह MemoryStore का उपयोग करता है, documentation देखें।

+0

हां धन्यवाद का उपयोग करेगा, वास्तव में कुकी सत्र का उपयोग एक्सप्रेस सत्र से बेहतर है, क्योंकि ऐसा लगता है सत्र को तब भी बनाए रखें जब सर्वर पुनरारंभ होता है। –

+0

@AlexMills मुझे लगता है कि कुकी के साथ यह अजीब लग रहा है - यह क्लाइंट पर सर्वर सत्र संग्रहीत करता है, लेकिन जेडब्ल्यूटी के मामले में क्लाइंट को यह तय करना चाहिए कि टोकन को अपने आप कहां स्टोर करना है। इस तरह आप क्लाइंट पर संग्रहीत डबल टोकन के साथ समाप्त कर सकते हैं। दूसरे विचार पर बेहतर समाधान है कि आपने अपने प्रश्न में सुझाए गए अनुसार 'एक्सप्रेस सत्र' मिडलवेयर को हटा दें। क्या तुमने कोशिश की? इस समाधान के साथ क्या समस्या है? –

+0

@AlexMills शायद आपको जो करना है वह है [passport.js सत्र अक्षम करें] (http://passportjs.org/docs#disable- सत्र) भी। सत्र डेटा डेटा टोकन के अंदर है क्योंकि सर्वर पर कुछ भी स्टोर करने की कोई आवश्यकता नहीं है। –

2

@ बोरीस सेरेब्रोव उत्तर अधिकतर सही है। आप शायद {session: false} सेट करना चाहते हैं ताकि डेटाबेस में सत्रों को सहेजने के साथ सत्र सर्वर पर स्मृति में संग्रहीत न हों। लेकिन शायद कहानी के लिए थोड़ा और है।

लोग लगातार मेमोरी स्टोर का उपयोग करने के कारणों में से एक कारण यह है कि इसका मतलब है कि यदि कोई सर्वर पुनरारंभ होता है, तो सत्र खो नहीं जाता है। हालांकि, हमें स्टेटलेस जेडब्ल्यूटी टोकन आधारित ऑथ का वादा किया गया है। तो अगर यह स्टेटलेस है, तो सर्वर क्यों पुनरारंभ होगा इससे कोई फर्क नहीं पड़ता?जैसे ही सर्वर बैक अप और चल रहा है, वही टोकन वैध होना चाहिए, सर्वर की स्थिति से कोई फर्क नहीं पड़ता, है ना?

मैंने पाया है कि, इस संक्षिप्त सत्र में, एक्सप्रेस सत्र सत्र प्रदान करेगा खो जाएगा यदि सर्वर पुनरारंभ होता है। यह शायद लोगों को मोंगो और रेडिस का उपयोग करके लगातार सत्रों का उपयोग करने के लिए प्रेरित करता है! लेकिन आपको ऐसा करने की ज़रूरत नहीं है! मुझे डीबी में संग्रहीत लगातार सत्रों का उपयोग करने का कोई कारण नहीं दिखता है। आपको जेडब्ल्यूटी और स्टेटलेस ऑथ का उपयोग करना चाहिए ... इसलिए विकल्प कुकी के लिए लगता है, एक्सप्रेस के लिए एक और मॉड्यूल।

तुम इतनी तरह cookieSession का उपयोग करते हैं:

app.use(cookieSession({ 
    name: 'some-cookie', 
    keys: ['key1', 'key2'] 
})); 

तो भले ही आप सर्वर पुनरारंभ, 'सत्र' बनी हुई है। यह, आदि अपने वर्तमान पासपोर्ट विन्यास के साथ काम करता है जब तक आप MongoStore में दुकान सत्र का कॉल निकालना के रूप में

https://github.com/expressjs/cookie-session

कृपया मुझे ठीक कर लें मैं गलत या अनदेखी कुछ कर रहा हूँ।

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