/ / django-allauth: solo permite a los usuarios de un dominio específico de Google Apps: django, django-allauth

django-allauth: solo permite usuarios de un dominio de aplicaciones de google específico - django, django-allauth

Soy un novato en Django. Usando django-allauth, he configurado el inicio de sesión con un solo clic. Obtuve mis credenciales de dominio (client_id y secret_key) de la consola de Google Api. Pero el problema es django-allauth es Permitirme iniciar sesión desde cualquier cuenta de Google mientras deseo que las direcciones de correo electrónico estén restringidas a mi dominio (@ example.com en lugar de @ gmail.com)

django-social-auth tiene los dominios incluidos en la lista blancaparámetro para esto, ¿cómo puedo incluir esta información en allauth? Encontré django-allauth mucho más fácil de configurar después de pasar horas en django-social-auth

Cualquier ayuda sería muy apreciada.

Respuestas

9 para la respuesta № 1

Respondiendo a mi propia pregunta-

Esto es en realidad bastante simple. Lo que desea hacer es detener el inicio de sesión después de que un usuario de la cuenta social haya autenticado a un usuario y antes de que pueda acceder a su página de perfil. Puedes hacer esto con el

pre_social_login método de la DefaultSocialAccountAdapter clase en 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.

Hacer algo como

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"))

Esto no es una implementación exacta pero algo como esto funciona.


0 para la respuesta № 2

Podrías hacer algo en la línea de anularallauth "s allauth.socialaccount.forms.SignupForm y comprobando el dominio durante el proceso de registro. Discalmer: todo está escrito sin pruebas, pero algo en la línea de eso debería funcionar.

# 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

en sus direcciones URL anule los valores predeterminados de allauth (ponga esto antes de incluir 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"),
# ...
)

No estoy seguro de "^ social / signup / $", vuelva a verificar eso.