2009-03-17 16 views
5

मुझे बताया गया है कि मुझे अपनी दृश्य फ़ाइलों में params[:user_id] जैसे चर का उपयोग नहीं करना चाहिए। क्या एक ही नियम session चर पर लागू होता है?मेरे दृश्य में सत्र चर का उपयोग

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

उत्तर

7

यह सिफारिश आपके रेल ऐप बनाने वाले विभिन्न घटकों के बीच "चिंताओं को अलग करने" के सर्वोत्तम अभ्यास से आती है। वर्तमान उपयोगकर्ता को निर्धारित करने के लिए सबसे अच्छी जगह आपके नियंत्रक में है। यह वह जगह है जहां आप अपने पैराम और/या सत्र का उपयोग यह निर्धारित करने के लिए करेंगे कि कोई प्रमाणीकरण प्लगइन के माध्यम से प्रत्यक्ष या अप्रत्यक्ष रूप से लॉग इन है या नहीं। फिर, यदि आपको अपने दृश्य में इस जानकारी की आवश्यकता है तो इसे एक वेरिएबल में संग्रहीत करें जैसे कि @user जो प्रदर्शन उद्देश्यों के लिए आपके दृश्य में स्वचालित रूप से उपलब्ध होगा। इसे इस तरह से करना, यदि आप बाद में अपना प्रमाणीकरण तंत्र बदलते हैं तो आप अपने विचारों को छूए बिना ऐसा कर सकते हैं, जो आपके लिए एक अच्छा संकेत है कि आपके ऐप के विभिन्न घटकों के बीच एक अच्छा अलगाव है।

अपने प्रश्न के दूसरे भाग के जवाब में

इसके अलावा:

मुझे लगता है मैं एक तरीका है जिसके कि कक्षा में अन्य सभी कार्यों के द्वारा कहा जाता हो जाता है में इस दोहराव कोड डाल सकता है लगता है। अपने नियंत्रक में before_filter है, जो आप एक विधि है कि प्रमाणीकरण जाँच करता है और बनाता है किसी भी आवश्यक उदाहरण चर अपने नियंत्रक में कार्रवाइयों के साथ साझा करने के लिए की ओर इंगित कर सकते हैं:

यह आसानी के साथ एक किया जा सकता है।

2

आप निश्चित रूप से प्रत्येक पृष्ठ लोड पर params[:user_id] या session[:user_id] सत्यापित करना चाहते हैं। यदि आपका सत्र अपहृत हो गया है, तो आप संभावित रूप से अवांछित कोड को अपने दृश्य में डाल सकते हैं और क्रॉस-साइट स्क्रिप्टिंग हमले की अनुमति दे सकते हैं।

यह कहा गया है कि authenticated_system प्लगइन में उपयोग की जाने वाली उचित विधि, वर्तमान_user सहायक विधि का संदर्भ देना है जो आपको current_user.user_id पुनर्प्राप्त करने की अनुमति देती है।

इसके अतिरिक्त, यदि आप डेटाबेस में कॉल में user_id का उपयोग कर रहे हैं, तो आपको अभी भी @selected_user = User.find(params[:user_id] पर कॉल करके और @selected_user.id को अपने दृश्य और नियंत्रक कार्रवाई में कॉल करके सत्यापित करना चाहिए।

आपको अधिक नियंत्रण और सुरक्षा मिल जाएगी।

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