2013-10-01 8 views
5

से अनुमति दें मैं Django में नौसिखिया हूं। Django-allauth का उपयोग करके मैंने एक क्लिक साइन इन सेट किया है। मैंने Google एपीआई कंसोल से अपने डोमेन क्रेडेंशियल (क्लाइंट_आईडी और गुप्त_की) प्राप्त किए हैं। लेकिन समस्या यह है Django-allauth दे रहा है मुझे किसी भी Google खाते से लॉग इन करते समय मैं चाहता हूँ ईमेल पते को अपने डोमेन (जैसे @ example.com के बजाय @ gmail.com)django-allauth: केवल उपयोगकर्ताओं को एक विशिष्ट Google ऐप्स डोमेन

Django-सामाजिक लेखन के लिए प्रतिबंधित किया जा सकता है इसके लिए सफेद सूचीबद्ध डोमेन पैरामीटर है, मैं इस जानकारी को allauth में कैसे शामिल करूं? मुझे django-allauth django-social-auth

पर किसी भी मदद की सराहना की जाएगी।

उत्तर

9

उत्तर देना मेरे अपने सवाल

यह वास्तव में बहुत सरल है। एक सामाजिक खाता प्रदाता द्वारा प्रमाणित किए जाने के बाद और वह अपने प्रोफाइल पेज पर आगे बढ़ने के बाद लॉगिन करना बंद कर देता है। आप में DefaultSocialAccountAdapter वर्ग के

pre_social_login विधि के साथ ऐसा कर सकते हैं allauth/socialaccount/adaptor.py

Invoked just after a user successfully authenticates via a 
    social provider, but before the login is actually processed 
    (and before the pre_social_login signal is emitted). 
    You can use this hook to intervene, e.g. abort the login by 
    raising an ImmediateHttpResponse 
    Why both an adapter hook and the signal? Intervening in 
    e.g. the flow from within a signal handler is bad -- multiple 
    handlers may be active and are executed in undetermined order. 
कुछ

करो

तरह
from allauth.socialaccount.adaptor import DefaultSocialAccountAdapter 

class MySocialAccount(DefaultSocialAccountAdapter): 
    def pre_social_login(self, request, sociallogin): 
     u = sociallogin.account.user 
     if not u.email.split('@')[1] == "example.com" 
      raise ImmediateHttpResponse(render_to_response('error.html')) 

यह एक सटीक कार्यान्वयन नहीं है लेकिन कुछ ऐसा काम करता है।

+1

और कस्टम एडाप्टर बनाने के बाद, प्लगइन के दस्तावेज़ों में कॉन्फ़िगरेशन सेक्शन के अनुसार इसे 'सेटिंग्स.SOCIALACCOUNT_ADAPTER' के साथ पंजीकृत करें। भविष्य में संदर्भ के लिए – Matt

+2

मैंने पाया कि मुझे 'u = sociallogin.user' का उपयोग करना था अन्यथा यदि कोई उपयोगकर्ता पहले मौजूद नहीं था तो मुझे एक त्रुटि मिलेगी। –

0

आप allauth के allauth.socialaccount.forms.SignupForm ओवरराइड करने की लाइन में कुछ कर सकते हैं और साइनअप प्रक्रिया के दौरान डोमेन की जांच कर सकते हैं। डिस्कमलर: यह सब परीक्षण के बिना लिखा गया है, लेकिन उस पंक्ति में कुछ काम करना चाहिए।

# settings.py 
# not necesarry, but it would be a smart way to go instead of hardcoding it 
ALLOWED_DOMAIN = 'example.com' 

# forms.py 
from django.conf import settings 
from allauth.socialaccount.forms import SignupForm 


class MySignupForm(SignupForm): 

    def clean_email(self): 
     data = self.cleaned_data['email'] 
     if data.split('@')[1].lower() == settings.ALLOWED_DOMAIN: 
      raise forms.ValidationError(_(u'domena!')) 
     return data 

अपने URL में ओवरराइड allauth चूक (Django-allauth के शामिल करने से पहले इस डाल)

# urls.py 

from allauth.socialaccount.views import SignupView 
from .forms import MySignupForm 


urlpatterns = patterns('', 
    # ... 
    url(r"^social/signup/$", SignupView.as_view(form_class=MySignupForm), name="account_signup"), 
    # ... 
) 

मैं "^ सामाजिक/साइनअप/$" के लिए यकीन नहीं है, कि पुनः जाँच।

+0

सही यूआरएल खाता/सामाजिक/साइनअप है। लेकिन यह काम नहीं करता है। मैं Google के साथ लॉग इन करने के बाद एक allauth साइन अप फॉर्म प्रदर्शित नहीं करना चाहता हूं। मैं चाहता हूं कि Google लॉगिन के तुरंत बाद, या तो उन्हें उनके प्रोफाइल पेज पर निर्देशित किया गया है या उन्हें एक त्रुटि संदेश मिल रहा है-हम केवल example.com डोमेन से उपयोगकर्ताओं को स्वीकार करते हैं। – aishpant

+0

क्या मुझे डोमेन मिलान से django-allauth के pre_social_login सिग्नल का उपयोग करना चाहिए? – aishpant

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