2011-02-01 11 views
14

के साथ लॉग इन/आउट करते समय कुकीज़ कैसे सेट करें मैं रेल 3 आवेदन के लिए डेविस का उपयोग कर रहा हूं। पेज कैशिंग के लिए, मुझे लॉग इन/आउट जानकारी के लिए कुकीज़ सेट करने की आवश्यकता है।डेविस

डेविस के साथ लॉग इन/आउट होने पर कुकीज़ सेट करने का सबसे आसान तरीका क्या है? मैंने 'कंट्रोलर को कस्टमाइज़ करने का तरीका' पढ़ा है लेकिन ऐसा लगता है कि यह बहुत काम है।

उत्तर

12

यह वास्तव में लॉग पर कुकीज़ जोड़ सकते हैं और लॉग आउट करने के चिंतन करना SessionsController विस्तार करने के लिए, आप एक नियंत्रक इस के समान बना सकते हैं बहुत कठिन नहीं होगा:

# app/controllers/sessions_controller.rb 
class SessionsController < Devise::SessionsController 
    # POST /resource/sign_in 
    def create 
    cookies[:sign_in] = "Sign in info you want to store" 
    super 
    end 

    # GET /resource/sign_out 
    def destroy 
    cookies[:sign_out] = "Sign out info you want to store" 
    super 
    end 
end 

तो फिर तुम जोड़ना होगा आपके मार्गों के बाद। आरबी:

devise_for :users, :controllers => { :sessions => "sessions" } 

इससे आपको सबसे अधिक रास्ता मिलना चाहिए।

Warden::Manager.after_set_user do |user,auth,opts| 
    auth.cookies[:signed_in] = 1 
    end 

    Warden::Manager.before_logout do |user,auth,opts| 
    auth.cookies.delete :signed_in 
    end 
+0

मैं कॉपी करने के लिए सत्र/new.html.haml था नष्ट करेगा होगा। यह काम करता हैं! धन्यवाद। –

+0

आप मूल का उपयोग करने के लिए http://stackoverflow.com/questions/4301249/how-to-change-the-default-path-of-view-files-in-a-rails-3-controller में समाधान का उपयोग कर सकते हैं देखा गया। –

+0

कुकीज iframe में सेट नहीं हैं। लॉग इन करने के बाद, यह मुझे 'इक्विड' एम्बेडेड एप्लिकेशन में लॉगिन पेज पर रीडायरेक्ट करता है। – kpp

18

के बाद वसीयत वार्डन पर आधारित है, एक और समाधान अपने devise.rb में वार्डन के कॉलबैक, जैसे उपयोग करने के लिए है अपने devise.rb प्रारंभकर्ता का अंत।

यह है, अगर मुझे विकल्प सेट किया गया है याद ईमेल याद करने के लिए कुकी जोड़ना नहीं तो यह कुकी

Warden::Manager.after_authentication do |user, auth, opts| 
    if user.remember_me 
    auth.cookies[:email] = {value: user.email, expires: 2.weeks.from_now} 
    else 
    auth.cookies.delete :email 
    end 
end 
+0

साइन इन_इन नियंत्रण के लिए कुकी सेट करने का अच्छा तरीका। मैंने स्वीकार्य उत्तर में बताए गए सत्र नियंत्रक के साथ प्रयास किया, यह भी काम करता था, लेकिन उपयोगकर्ता 'पासवर्ड भूल गए' विधि के साथ अपना पासवर्ड रीसेट करने के बाद कुकी को ठीक से स्थापित नहीं कर रहा था। यह वार्डन कॉलबैक का उपयोग करके उम्मीद के रूप में काम किया! –

+0

यह अधिक प्रभावी है। Omniauth के माध्यम से लॉग इन करने या जब कोई उपयोगकर्ता अपना पासवर्ड अपडेट करता है और फिर से साइन इन करने की आवश्यकता होती है, तो परिस्थितियों को संभालता है। – ScotterC

+4

@karlrosaen ~ 'auth.cookies' अब समर्थित नहीं है – Roland

3

@ से अनुकूलित कार्ल-rosaen इस समाधान का जवाब एक नया प्रारंभकर्ता बना सकते हैं या करने के लिए जोड़ें: