2012-02-10 11 views
17

के साथ साइन इन करने का प्रयास करता है, पुष्टि करने योग्य मॉड्यूल सक्षम होने के साथ, देवता किसी पूर्व-निर्धारित उपयोगकर्ता को पूर्व निर्धारित अवधि समाप्त होने के बाद साइन इन करने की अनुमति नहीं देगा। इसके बजाए उपयोगकर्ता को फ्लैश संदेश के साथ साइन इन पेज पर रीडायरेक्ट किया जाता है "जारी रखने से पहले आपको अपने खाते की पुष्टि करनी होगी"।पुष्टि के साथ तैयार करें - उपयोगकर्ताओं को एक कस्टम पृष्ठ पर रीडायरेक्ट करें जब उपयोगकर्ता एक पुष्टिकृत ईमेल

यह एक अवांछित इंटरैक्शन मॉडल है, क्योंकि एक फ्लैश नोटिस उपयोगकर्ता को उचित रूप से समझाए जाने के लिए पर्याप्त जगह प्रदान नहीं करता है कि क्यों पहुंच अस्वीकार कर दी गई है, "आपके खाते की पुष्टि करें" का अर्थ है, पुष्टि को पुनः भेजने के लिए एक लिंक प्रदान करें, और निर्देश अपने स्पैम फ़ोल्डर को कैसे जांचें और इसी तरह।

क्या कोई तरीका है कि मैं इस व्यवहार को एक विशिष्ट यूआरएल पर रीडायरेक्ट करने के लिए बदल सकता हूं?

उत्तर

27

पहले क्षमा करें मैंने सोचा था कि साइन अप साइन इन करने के बाद आपका मतलब था। तो नीचे निर्देशित करने के लिए कैसे उपयोगकर्ताओं के बाद साइन अप के लिए काम करता है और क्या आप साइन के लिए ऐसा करने के लिए एक कस्टम बनाने के लिए है की जरूरत है वसीयत :: FailureApp

विकि पृष्ठ देखें: फिर अपने कस्टम FailureApp भीतर https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated

https://github.com/plataformatec/devise/blob/master/lib/devise/failure_app.rb से redirect_url विधि के ऊपर लिख:

def redirect_url 
    if warden_message == :unconfirmed 
     custom_redirect_path 
    else 
     super 
    end 
    end 

कस्टम रीडायरेक्ट के लिए के बाद साइन अप करें:

RegistrationsContro भीतर एक नियंत्रक विधि after_inactive_sign_up_path_for नहीं है ller कि आप इसे पूरा करने के लिए ओवरराइट कर सकते हैं।

devise_for :users, :controllers => { :registrations => "users/registrations" } 

दूसरा आपको लगता है कि आदेश विधि अधिलेखित करने में सामान्य नियंत्रक से विरासत अपने कस्टम नियंत्रक बनाने के लिए:

config/routes.rb:

अपने मार्ग में पहले अपने कस्टम नियंत्रक का उपयोग करने के लिए निर्दिष्ट करना होगा :

app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController 

    protected 

    def after_inactive_sign_up_path_for(resource) 
    signed_up_path 
    end 

end 

इस मामले में मेरे ऐप के लिए मेरा डेविस मॉडल उपयोगकर्ता है, इसलिए यदि आपका मॉडल अलग-अलग नाम दिया गया है तो आप उस नामस्थान को बदलना चाहेंगे। मैं चाहता था कि मेरे उपयोगकर्ताओं को signed_up_path पर रीडायरेक्ट किया जाए, लेकिन आप इसे अपने वांछित पथ में बदल सकते हैं।

9

मैंने अभी यह किया है, लेकिन एक अलग दृष्टिकोण लिया।

एप्लिकेशन/नियंत्रक/sessions_controller.rb में

:

class SessionsController < Devise::SessionsController 

    before_filter :check_user_confirmation, only: :create 

    # 
    # other code here not relevant to the example 
    # 

private 

    def check_user_confirmation 
    user = User.find_by_email(params[:email]) 
    redirect_to new_confirmation_path(:user) unless user && user.confirmed? 
    end 
end 

यह मेरे लिए काम किया है और कम आक्रामक लग रहा था। मेरे ऐप में नए सत्रों को हमेशा sessions#create से गुजरना पड़ता है और उपयोगकर्ता हमेशा अपने ईमेल पते से साइन इन करते हैं, इसलिए यह आपके से एक आसान मामला हो सकता है।

आप redirect_to किसी भी स्थान पर check_user_confirmation विधि में रुचि रखते हैं। new_confirmation_path मेरे लिए तार्किक विकल्प था क्योंकि यह उपयोगकर्ताओं को संसाधनों के साथ पुष्टि करने के लिए प्रदान करता है।

+0

एक सवाल: मैं कैसे उपयोगकर्ता जब वह उपयोगकर्ता नाम या ईमेल के साथ प्रवेश कर सकते हैं मिल सकता है? तो आपको पैरामीटर के रूप में 'लॉगिन' मिलता है, जो उपयोगकर्ता ईमेल या उपयोगकर्ता नाम हो सकता है। – jonhue

0

यह मेरा समाधान है जिसे आपको जोड़ने की आवश्यकता है: सत्रों के नीचे देवताओं के स्थान पर असुरक्षित संदेश।

एप्लिकेशन/नियंत्रक/sessions_controller.rb में

def check_user_confirmation 
    user = User.where(email: params[:user][:email]).take 

    unless user && user.confirmed? 
     set_flash_message! :alert, :unconfirmed 
     expire_data_after_sign_in! 
     respond_with user, location: after_inactive_sign_up_path_for(user) 
    end 
    end 

    protected 

    def after_inactive_sign_up_path_for(resource) 
    new_user_session_path 
    end 
संबंधित मुद्दे

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