रेल: कुख्यात "current_user" कहां से आता है?


94

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

जवाबों:


81

इसे कई रत्नों द्वारा परिभाषित किया गया है, जैसे डेविस

आपको उपयोगकर्ता को कहीं और संग्रहीत करने की आवश्यकता होगी, आमतौर पर सत्र में लॉग इन करने के बाद। यह आपके ऐप को मानता है और उपयोगकर्ताओं, प्रमाणीकरण आदि की आवश्यकता है।

आमतौर पर, यह कुछ इस तरह है:

class ApplicationController < ActionController::Base
  def current_user
    return unless session[:user_id]
    @current_user ||= User.find(session[:user_id])
  end
end

यह मानता है कि उपयोगकर्ता वर्ग मौजूद है, उदाहरण के लिए #{Rails.root}/app/models/user.rb

अपडेट किया गया: वर्तमान उपयोगकर्ता नहीं होने पर अतिरिक्त डेटाबेस प्रश्नों से बचें।


उपयोगकर्ता लॉगिन स्थिति को नियंत्रित करने के उद्देश्य से सत्र आमतौर पर उपयोग किए जाने वाले नियंत्रक / मॉडल की तरह है? या यह रेल में बनाया गया है?
बिग पोटैटो 10

sessionरेल में बनाया गया है। डिफ़ॉल्ट रूप से, यह अनुरोधों के बीच क्लाइंट की स्थिति बनाए रखने के लिए कुकी का उपयोग करता है। अधिक जानकारी के लिए guide.rubyonrails.org/security.html#session देखें ।
एरिक पीटरसन

2
नोट: यदि आप इस उत्तर को पढ़ रहे हैं, तो return unless session[:user_id]ज़च के उत्तर में दिखाए अनुसार शामिल करना सुनिश्चित करें - इसके बिना, if current_userसाइन आउट करते समय हर चेक आपके डेटाबेस क्वेरी को ट्रिगर करेगा।
DreadPirateShawn

10

हाँ, current_userउपयोग करता है session। यदि आप अपने स्वयं के प्रमाणीकरण को रोल करना चाहते हैं, तो आप अपने एप्लिकेशन कंट्रोलर में कुछ ऐसा ही कर सकते हैं:

def current_user
  return unless session[:user_id]
  @current_user ||= User.find(session[:user_id])
end

उपयोगकर्ता लॉगिन स्थिति को नियंत्रित करने के उद्देश्य से सत्र आमतौर पर उपयोग किए जाने वाले नियंत्रक / मॉडल की तरह है? या यह रेल में बनाया गया है?
Bigpotato

1
sessionparamsयह कई अनुरोधों के लिए बनी रहती है, जैसे की तरह है । आप किसी भी प्रकार के लगातार पैरामीटर को अपने व्यक्तिगत उपयोगकर्ताओं के लिए अनूठे स्टोर करने के लिए उपयोग कर सकते हैं (जब तक कि उनका सत्र समाप्त नहीं होता या वे लॉग आउट नहीं करते)। आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं: एक्शनकंट्रोलर: सत्र तक पहुँचना
Zach Kemp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.