2013-10-01 2 views
5

Я новичок в Django. Используя django-allauth, я установил один клик. Я получил свои учетные данные (client_id и secret_key) из консоли google api. Но проблема в том, Джанго-allauth является позволить мне войти в систему с любого счета Google в то время как я хочу, адреса электронной почты, чтобы ограничить к моему домену (@ example.com вместо @ gmail.com)django-allauth: разрешать только пользователям из домена Google Apps

Джанго-социально-Идент имеет белый список параметров для этого, как включить эту информацию в allauth? Я нашел django-allauth гораздо проще настроить после проведения часов на django-social-auth

Любая помощь была бы высоко оценена.

ответ

9

Ответ мой собственный question-

Это на самом деле довольно просто. То, что вы хотите сделать, - это приостановить логин после того, как пользователь был аутентифицирован поставщиком социальных услуг и до того, как он перейдет на страницу своего профиля. Вы можете сделать это с

pre_social_login способе класса DefaultSocialAccountAdapter в 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

и после создания настраиваемого адаптера зарегистрируйте его с помощью 'settings.SOCIALACCOUNT_ADAPTER' в соответствии с разделом конфигурации в документах плагина. – Matt

+2

для будущей ссылки Я нашел, что мне пришлось использовать 'u = sociallogin.user', иначе я бы получил ошибку, если пользователь ранее не существовал. –

0

Вы можете сделать что-то в строке переопределения allauth's allauth.socialaccount.forms.SignupForm и проверки домена во время процесса регистрации. Discalmer: все это написано без тестирования, но что-то в этом работает.

# 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 по умолчанию (поставить это перед включать Джанго-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

Правильный адрес - это учетная запись/социальная/регистрация. Но это не работает. Я не хочу отображать форму регистрации allauth после входа в Google. Я хочу, чтобы сразу после входа в Google, либо они были направлены на их страницы профиля, либо они получили сообщение об ошибке messsage - мы принимаем пользователей только из домена example.com. – aishpant

+0

Должен ли я использовать pre_social_login сигнал django-allauth для соответствия домена? – aishpant

Смежные вопросы