2017-06-26 15 views
6

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

मैं उलझन में हूं। मैं सत्रों के साथ कैसे काम कर सकता हूं? के लगता है कि हम फ्लास्क में इस तरह की एक कोड है करते हैं:

import os 
from flask import Flask, request, jsonify, abort, session 

app = Flask(__name__) 
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') or \ 
    'e5ac358c-f0bf-11e5-9e39-d3b532c10a28' 

@app.route('/login', methods=['POST']) 
def user_login(): 
    user = request.form['user'] 
    session['isLogged'] = True 
    return jsonify({'status': session['isLogged']}) 

@app.route('/user-info') 
def user_info(): 
    if 'isLogged' in session: 
     return jsonify({'user': 'ali'}) 
    else: 
     return jsonify({'error': 'Authentication error'}) 

और हमारे सामने के अंत कोड इस तरह होना चाहिए: जब तक मैं पेज को ताज़ा

mounted() { 
    this.checkIsLogged(); 
    }, 
    methods: { 
    checkIsLogged() { 
     fetch('http://127.0.0.1:5000/user-info', { 
     mode: 'no-cors', 
     method: 'GET', 
     }).then((resp) => { 
     return resp; 
     }).then((obj) => { 
     if(obj.user) { 
      this.status = true 
     } 
     }) 
    }, 
    login() { 
     let frmData = new FormData(document.querySelector("#frmLogin")); 

     fetch('http://127.0.0.1:5000/login', { 
     mode: 'no-cors', 
     method: 'POST', 
     body: frmData, 
     }).then((resp) => { 
     return resp; 
     }).then((obj) => { 
     this.status = obj.status 
     }) 
    } 
    } 

सब कुछ सामान्य है। जब मैं पृष्ठ को रीफ्रेश करता हूं, तो मैं सत्र खो देता हूं।

सर्वर-साइड सत्र कई कारणों से महत्वपूर्ण हैं। अगर मैं localStore का उपयोग करता हूं या ऐसा कुछ सुरक्षित कैसे हो सकता है तो मुझे कोई जानकारी नहीं है।

मुझे ऐसी कुछ मदद की ज़रूरत है जो समान परियोजनाओं पर काम करते हैं। आप मुझे सुझाव दे सकते हैं। क्योंकि मैंने कभी भी इसी तरह की परियोजनाओं का काम नहीं किया।

अन्य सामान मैं इस विषय पर पढ़ा है:

मैं अब भी मैं क्या कर सकता के बारे में करने के लिए संदेह में हूँ।

+1

क्या आप क्रॉस डोमेन पर अनुरोध भेज रहे हैं? जहां सत्र और कुकीज़ नहीं भेजी जाएंगी? –

उत्तर

1

सत्र प्रबंधन कुछ ऐसा है जो आपकी एसपीए वास्तव में ज्यादा परवाह नहीं करता है। सत्र उपयोगकर्ता-एजेंट (ब्राउज़र) और सर्वर के बीच है। आपके vue आवेदन के साथ इसके साथ बहुत कुछ नहीं है। यह कहना नहीं है कि आप कुछ गलत नहीं कर सकते हैं, लेकिन आम तौर पर यह मुद्दा आपके सामने के अंत में नहीं है।

कहा जा रहा है कि यह कठिन है इस सवाल का जवाब दें क्योंकि हम वास्तव में नहीं जानते कि क्या गलत है। मैं क्या कर सकता हूं यह आपको निर्देश देता है कि आप इस तरह की समस्या का निदान कैसे कर सकते हैं। इस निदान के दौरान आप यह पता लगाएंगे कि वास्तविक समस्या कहां है और कम से कम मेरे लिए, यह आमतौर पर स्पष्ट हो जाता है कि मुझे क्या करना है। (व्यक्तिगत रूप से मैं का उपयोग

चरण 1)

सर्वर प्रतिक्रिया की जाँच करने के कुछ निम्न स्तर HTTP उपकरण का उपयोग करें कर्ल या डाकिया जब आलसी)। सर्वर पर लॉगिन अनुरोध भेजें और प्रतिक्रिया शीर्षलेख पर एक नज़र डालें। जब लॉगिन सफल होता है तो आपके पास आमतौर पर "सत्र-कुकी" या सत्र के लिए उपयोग की जाने वाली किसी भी कुंजी की सामग्री के साथ "सेट-कुकी" होना चाहिए। आप एक "सेट-कुकी" निम्न में से एक दिखाई नहीं देता तो सत्य है:

  • आपके सर्वर ने सत्र शुरू नहीं किया है और इस तरह
  • वहाँ एक प्रॉक्सी है ग्राहक के लिए एक सत्र कुकी नहीं भेजा/फ़ायरवॉल/एंटी-एड- या ट्रैकिंग प्लगइन कहीं फ़िल्टरिंग कुकीज़

यदि आप सेट-कुकी हेडर चरण 2 के साथ जारी रखते हैं, तो अन्यथा अपनी चुनी बैकएंड तकनीक में सत्रों के संबंध में मैन्युअल जांचें।

चरण 2)

शुक्र अधिकांश आधुनिक ब्राउज़र एक डेवलपर कंसोल जो आपको दो काम करने की अनुमति देता है: 1) अपने HTTP अनुरोध हेडर, शरीर और प्रतिक्रिया हेडर और शरीर 2) संग्रहीत पर एक नजर डालें चेक कुकीज़

पहली सुविधा का उपयोग करना (क्रोम में यह डेवलपर कंसोल में "नेटवर्क" टैब के नीचे होगा) अनुरोध और प्रतिक्रिया का निदान करें। ऐसा करने के लिए आपको अपने ऐप में लॉगिन करने के दौरान डेवलपर कंसोल खोलने की आवश्यकता है। लॉगिन की प्रतिक्रिया की जांच करें, अगर लॉगिन सफल हुआ तो इसमें सेट-कुकी होना चाहिए। यदि कुकी मौजूद नहीं है तो आपका सर्वर इसे नहीं भेजता है, शायद सुरक्षा कारणों (क्रॉस-मूल नीतियों) के लिए।

यदि यह मौजूद है, तो कुकी अब कुकी स्टोर में मौजूद होनी चाहिए। क्रोम डेवलपर कंसोल में, "एप्लिकेशन" टैब पर जाएं, बाएं मेनू से कुकीज़ का विस्तार करें और उन होस्टों पर नज़र डालें जिनके लिए कुकीज़ मौजूद हैं। एक कुकी उपस्थिति होना चाहिए जो पहले चरण में स्थापित किया गया था। यदि ब्राउजर ने कुकी स्वीकार नहीं की है। यह आमतौर पर तब होता है जब आपकी कुकी किसी निश्चित डोमेन या पथ के लिए सेट होती है, जो सही नहीं है। ऐसे मामले में आप डोमेन और/या पथ को खाली या सही मान (पथ "/" के पथ में सेट करने का प्रयास कर सकते हैं)। अगर आपकी कुकी मौजूद है, तो चरण 3

चरण 3)

याद रखें जब मैंने कहा कि स्क्रीन के साथ कोई संबंध नहीं है जाना। प्रत्येक अनुरोध जो आप AJAX के साथ भेजते हैं या बस ब्राउज़र में एक मान्य यूआरएल दर्ज करते हैं, अनुरोध हेडर में इस मेजबान के लिए मौजूद सभी कुकीज़ भेजता है। ऐसा तब तक होता है जब तक आप ऐसा करने के लिए उपयोग की जाने वाली किसी भी लाइब्रेरी को सक्रिय रूप से रोक नहीं देते। आपके अनुरोध सत्र कुकी निम्न में से एक शामिल नहीं है आमतौर पर सच है, तो:

  • अपने http पुस्तकालय के उपयोग के लिए सक्रिय रूप से
  • कुकीज़ भेजने आपके पास सही अनुरोध लेकिन cookie- भेज रहे हैं होने से बचाता है डोमेन/पथ अनुरोध मेजबान/पथ से मेल नहीं करता है और इस प्रकार के साथ
  • अपने कुकी नहीं भेजी जाती है सुपर अल्पकालिक है और पहले से ही समाप्त हो गया है

अपने कुकी सही ढंग से भेज दिया जाता है, तो आपके सत्र से निपटने जब तक काम करना चाहिए अपने सर्वर रिम नहीं करता है मौजूदा सत्र के बावजूद सत्र शुरू होता है या नया सत्र शुरू करता है।

मुझे एहसास है कि यह प्रश्न काफी पुराना है और यह व्यापक उत्तर बहुत देर हो गया है, हालांकि इसी तरह की समस्याओं वाले किसी व्यक्ति से इसका लाभ प्राप्त हो सकता है।

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