2014-05-25 5 views
6

मैं अपनी रेल 4 वेबसाइट पर सभी पृष्ठों पर लॉगिन की आवश्यकता है। एप्लिकेशन नियंत्रक में मैंने before_action :authenticate_user! जोड़ा है, लेकिन यह बस कुछ भी नहीं करता है। मैंने एक ही नियंत्रक को before_action :authenticate_user! जोड़ने की कोशिश की है, और यह ठीक काम करता है।पहले से कार्यवाही का उपयोग करना: प्रमाणीकरण_user! कुछ भी नहीं करता

क्या मुझे एप्लिकेशन कंट्रोलर को कुछ और करने की ज़रूरत है, ताकि सभी कार्यों पर लॉगिन की आवश्यकता हो (साइनअप/साइनइन को छोड़कर)?

सुनिश्चित करें कि आपके अन्य नियंत्रकों application_controller से इनहेरिट कर रहे हैं -

:

#app/controllers/application_controller.rb 
Class ApplicationController < ActionController::Base 
    #Actions 
    before_action :authenticate_user! #-> routes to the login/signup if not authenticated 
end 

समस्या आप शायद दो गुना है:

+2

यह तब तक ठीक होना चाहिए जब तक कि आपके अन्य नियंत्रक वास्तव में एप्लिकेशन नियंत्रक से उत्तराधिकारी न हों ... – pdobb

उत्तर

12

यहाँ वास्तविक कोड हम का उपयोग करें

#app/controllers/other_controller.rb 
Class OtherController < ApplicationController 
    ... 
end 

-

आप किसी भी तरह "लंघन" कर रहे हैं before_action कॉलबैक

आप उपयोग कर रहे हैं skip_before_action कहीं भी, आप इसे दूर करने के लिए की जरूरत है। यह आपके authenticate_user! विधि के साथ समस्या का कारण बन जाएगा। इसे ठीक करने के लिए, मैं सबसे पहले किसी भी skip_before_action कॉलबैक बिना परीक्षण, और उसके बाद क्या हो जाता है देखना होगा इसे सही ढंग से


एक और टिप्पणी काम कर - signin/signup कोई फर्क नहीं होगा। वे सभी Devise नियंत्रकों से प्राप्त होते हैं; वे बस आवश्यकतानुसार चलाएंगे।

+2

मुझे पता चला कि मैं केवल एप्लिकेशन नियंत्रक से विरासत के बजाय एक्शनकंट्रोलर :: बेस का उपयोग कर रहा था। मैं एक जवाब लिखने के लिए वापस गया, लेकिन आप मेरे सामने आए :) – Dofs

+0

lol अच्छी तरह से अपवित्र और स्वीकृति के लिए धन्यवाद! क्या अब यह काम कर रहा है? –

+0

हां यह है, धन्यवाद :) – Dofs

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