2012-01-13 17 views
6

का प्रमाणीकरण मैं प्रमाणीकरण के लिए तैयार किए बिना omniauth का उपयोग कर रहा हूं, क्योंकि मुझे इसकी सादगी पसंद है। Omniauth-facebook के अलावा मैं ईमेल/पीडब्ल्यू-प्रमाणीकरण की पेशकश करने के लिए सर्वज्ञ-पहचान का उपयोग करता हूं।
railscast on omniauth-identity वर्णन करता है कि एक अनुकूलित पंजीकरण और लॉगिन पृष्ठ कैसे सेट करें। लेकिन पहचान (/ auth/पहचान और/auth/पहचान/रजिस्टर) द्वारा प्रदान किए गए डिफ़ॉल्ट मार्ग अभी भी उपलब्ध हैं।ओवरराइड "/ auth/identity" - omniauth पहचान

मैं इन्हें अपने नियंत्रण में रखना चाहता हूं, क्योंकि मैं केवल आमंत्रित उपयोगकर्ताओं को पंजीकरण करना चाहता हूं। क्या रैक मिडलवेयर द्वारा प्रदान किए गए उन मार्गों को ओवरराइड करने का कोई तरीका है?
सिर्फ

match "/auth/identity", to: "somewhere#else" 

की कोशिश चाल नहीं करता है!

क्या इन डिफ़ॉल्ट मार्गों को बंद करने के लिए शायद कोई कॉन्फ़िगरेशन हो सकता है? दस्तावेज इस पर कोई विवरण नहीं दे रहा है ...

दुर्भाग्य से मैं रैक के लिए बिल्कुल नया हूं, इसलिए मेरे पास इस मुद्दे को हल करने के लिए अभी तक पर्याप्त अंतर्दृष्टि नहीं है!
मुझे खुशी होगी, अगर कोई मुझे सही दिशा में इंगित कर सकता है!

+0

अंत में मैं सिर्फ आमंत्रित उपयोगकर्ताओं को एक पदबंध, तो यह वास्तव में कोई फर्क नहीं था दे दी है, वहाँ मूल पहचान साइट अभी भी पहुंच से बाहर था कि ... – wdspkr

उत्तर

6

एक OmniAuth रणनीति वस्तु का एक तरीका request_phase है जो एक HTML फॉर्म उत्पन्न करता है और इसे उपयोगकर्ता को दिखाता है। "Omniauth-identity" रणनीति के लिए यह वह फॉर्म होगा जिसे आप /auth/identity यूआरएल पर देखते हैं।

आप request_phase विधि को ओवरराइड कर सकते हैं और फ़ॉर्म जनरेटर को प्रतिस्थापित कर सकते हैं, उदाहरण के लिए, अपने कस्टम लॉगिन पेज पर रीडायरेक्ट (मान लीजिए कि यह /login यूआरएल पर उपलब्ध है)। जगह अपने omniauth प्रवर्तन कोड के साथ साथ निम्नलिखित:

module OmniAuth 
    module Strategies 
    class Identity 
    def request_phase 
     redirect '/login' 
    end 
    end 
end 
end 

# Your OmniAuth::Builder configuration goes here... 
+0

आप तो आप अनुरोध चरण ओवरराइड करने के लिए चाहते हैं ' शायद मैं 'register_phase' के साथ भी ऐसा करना चाहता हूं, और यह सुनिश्चित करने के लिए कि 'पंजीकरण_पथ' विकल्प * सेट * सेट नहीं है। – iain

+0

+1 इस – Trip

4

1gors और iains जवाब के अलावा:

"/ प्रमाणन/पहचान/पंजीकरण" के रूप में अच्छी तरह से मिलता है, ओवरराइड करने के लिए साथ परोसा जाता है, मैं करने के लिए किया था :

class OmniAuth::Strategies::Identity 
    alias :original_other_phase :other_phase 
    def other_phase 
    if on_registration_path? && request.get? 
     redirect '/sign_up' 
    else 
     original_other_phase 
    end 
    end 
end 
+0

+1 के लिए धन्यवाद, मैंने इसे 'Rails.application.config.middleware.use OmniAuth :: बिल्डर डू ... एंड' ब्लॉक के तहत'/config/startizers/omniauth.rb' में जोड़ा है, साथ में @ 1gors जवाब। धन्यवाद) – Andrew

1

उदाहरण के लिए आप omniauth.rb

:on_login => SessionsController.action(:new) 

में विधि सेट कर सकते हैं:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :identity, 
      :fields => [:nickname], 
      :on_login => SessionsController.action(:new), 
      :on_registration => UsersController.action(:new), 
      :on_failed_registration => SessionsController.action(:registration_failure) 
end 
संबंधित मुद्दे