LIL-27 Login/registration for facebook

remotes/origin/hasaccess
Sergey G 8 years ago
parent 6f05b5823c
commit c500abb021
  1. 1
      apps/auth/urls.py
  2. 46
      apps/auth/views.py
  3. 1
      apps/user/models.py
  4. 3
      requirements.txt

@ -7,6 +7,7 @@ urlpatterns = [
path('logout/', views.LogoutView.as_view(), name="logout"),
path('login/', views.LoginView.as_view(), name="login"),
path('verification-email/<slug:token>/', views.VerificationEmailView.as_view(), name="verification-email"),
path('facebook_login/', views.FacebookLoginOrRegistration.as_view(), name="facebook_login"),
path('password_reset/', views.PasswordResetView.as_view(), name="password_reset"),
path('password_reset_confirm/<slug:uidb64>/<slug:token>/', views.PasswordResetConfirmView.as_view(), name="password_reset_confirm"),

@ -1,13 +1,21 @@
from uuid import uuid4
from facepy import GraphAPI
from facepy.exceptions import FacepyError
from django.contrib.auth import get_user_model, logout, login, views
from django.contrib.auth.forms import AuthenticationForm
from django.http import JsonResponse
from django.urls import reverse_lazy
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import FormView, View
from django.views.generic.edit import BaseFormView
from django.urls import reverse_lazy
from apps.notification.utils import send_email
from apps.user.models import LilcityUserSettings, LilcityUserProxy
from .forms import LearnerRegistrationForm
from .tokens import verification_email_token
from apps.notification.utils import send_email
User = get_user_model()
@ -100,3 +108,37 @@ class PasswordResetConfirmView(views.PasswordResetConfirmView):
class PasswordResetComplete(views.PasswordResetCompleteView):
pass
@method_decorator(csrf_exempt, name="dispatch")
class FacebookLoginOrRegistration(View):
def post(self, requests, *args, **kwargs):
access_token = requests.POST.get('access_token')
graph = GraphAPI(access_token)
try:
data = graph.get('/me?fields=email, first_name, last_name')
except FacepyError:
return JsonResponse({"success": False})
facebook_id = data.get('id')
lilcity_user_settings = LilcityUserSettings.objects.filter(facebook_id=facebook_id)
if lilcity_user_settings.count():
login(requests, user=lilcity_user_settings[0].user)
return JsonResponse({"success": True})
email = requests.POST.get('email') or data.get('email')
if not email:
return JsonResponse({"success": False,
"errors": {"email": 'is field required'}
})
else:
first_name = data.get('first_name', '')
last_name = data.get('last_name', '')
user = LilcityUserProxy.objects.create_user(username=email, email=email, first_name=first_name, last_name=last_name, password=uuid4().hex)
user.lilcity_user_settings.is_verification_email = True
user.lilcity_user_settings.facebook_id = facebook_id
user.lilcity_user_settings.save()
return JsonResponse({"success": True})

@ -23,4 +23,5 @@ class LilcityUserProxy(User):
class LilcityUserSettings(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='lilcity_user_settings')
is_verification_email = models.BooleanField(default=False)
facebook_id = models.PositiveIntegerField(null=True, blank=True, unique=True)

@ -2,4 +2,5 @@ Django==2.0.1
django-anymail[mailgun]==1.2
paymentwall-python==1.0.7
twilio==6.10.0
psycopg2==2.7.3.2
psycopg2==2.7.3.2
facepy==1.0.9
Loading…
Cancel
Save