В моем проекте Django у меня есть как обычная регистрация, так и вход в Google. Если пользователь регистрируется обычным образом и предоставляет свой адрес электронной почты, а затем пытается войти в систему Google, используя тот же адрес электронной почты, появляется классический экран входа в систему. Я хочу следующее: если пользователь сначала входит в систему с помощью Google, а затем пытается войти в систему с тем же адресом электронной почты посредством обычной регистрации, или если он регистрируется нормально, а затем пытается войти в систему с помощью Google, используя тот же адрес электронной почты, мне нужны оба метода. вести на тот же аккаунт. Другими словами, независимо от того, входят ли они в систему с помощью Google или обычной регистрации, информация пользователя должна быть объединена, и в обоих случаях они должны получить доступ к одной и той же учетной записи.
разделы входа в социальные сети в настройках. пы:
def loginUser(request):
if (request.user.is_authenticated):
messages.error(request,"Giriş Yapılıyken Giriş Yapamazsın!")
return redirect("index")
form = LoginForm(request.POST or None)
if (form.is_valid()):
login(request,form.cleaned_data["user"])
messages.success(request,"Başarıyla Giriş Yaptın!")
return redirect("index")
return render(request,"login.html",{"form":form})
def register(request):
if (request.user.is_authenticated):
messages.error(request,"Giriş Yapılıyken Kayıt Olamazsın!")
return redirect("index")
form = RegisterForm(request.POST or None)
if (form.is_valid()):
username = form.cleaned_data["username"]
password = form.cleaned_data["password"]
email = form.cleaned_data["email"]
newUser = User(username=username,email=email)
newUser.is_active = False
newUser.set_password(password)
newUser.backend = "django.contrib.auth.backends.ModelBackend"
newUser.save()
send_verification_mail(request,newUser)
newUser_profile = Profile(user=newUser,profile_photo="profile_photo/default/default.jpg")
newUser_profile.save()
messages.success(request,"Hesabınız Oluşturuldu Hesabınızı Aktif Etmek İçin Mail Kutunuzu Kontrol Edin")
return redirect("index")
return render(request,"register.html",{"form":form})
def send_verification_mail(request,user):
current_site = get_current_site(request) # Bu sitenin bilgilerini alır
subject = "Email Dogrulama"
message = render_to_string("email/email_verification.html",{ # render_to_string, bir Django şablonunu işleyip dönen sonucu bir string (metin) olarak döndürür./NORMAL RENDER İSE, bir Django şablonunu işleyip bir HttpResponse nesnesi döndürür. Bu, işlenmiş şablonu bir HTTP yanıtı olarak tarayıcıya göndermek için kullanılır.
'user': user,
'domain': current_site.domain, # Yukarıda aldığımız bu sitenin domaini
'uid': urlsafe_base64_encode(force_bytes(int(user.pk))), # user objesinin id'sini byte veri tipine çevirip url için güvenli ve uygun olarak base64 olarak tekrar kodlar
'token': default_token_generator.make_token(user), # user objesine özel token oluşturur
})
email = EmailMessage(
subject=subject,
body=message,
from_email="sefasteam435@gmail.com",
to=[user.email],
)
email.content_subtype = "html" # Email içeriğinin türünü html yaptık
email.send(fail_silently=False)
def verify_email(request, uidb64, token):
try:
uid = urlsafe_base64_decode(uidb64).decode()
user = get_object_or_404(User, pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist) as e:
user = None
if user and default_token_generator.check_token(user, token):
user.is_active = True
user.save()
messages.success(request, 'E-posta doğrulamanız başarılı. Artık giriş yapabilirsiniz.')
return redirect('user:login')
else:
messages.error(request, 'Geçersiz doğrulama bağlantısı.')
return redirect('user:register')
Я ничего не мог сделать сам, я исследовал это, но не смог найти то, что искал.
Примечание: я Я новичок в StackOverflow, простите меня, если я допустил ошибку, задавая свой вопрос.
В моем проекте Django у меня есть как обычная регистрация, так и вход в Google. Если пользователь регистрируется обычным образом и предоставляет свой адрес электронной почты, а затем пытается войти в систему Google, используя тот же адрес электронной почты, появляется классический экран входа в систему. Я хочу следующее: если пользователь сначала входит в систему с помощью Google, а затем пытается войти в систему с тем же адресом электронной почты посредством обычной регистрации, или если он регистрируется нормально, а затем пытается войти в систему с помощью Google, используя тот же адрес электронной почты, мне нужны оба метода. вести на тот же аккаунт. Другими словами, независимо от того, входят ли они в систему с помощью Google или обычной регистрации, информация пользователя должна быть объединена, и в обоих случаях они должны получить доступ к одной и той же учетной записи. разделы входа в социальные сети в настройках. пы: [code]SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '' SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '' SOCIALACCOUNT_LOGIN_ON_GET=True ACCOUNT_UNIQUE_EMAIL = True EMAIL_VERIFICATION_METHOD = 'email'
if (request.user.is_authenticated): messages.error(request,"Giriş Yapılıyken Giriş Yapamazsın!") return redirect("index")
form = LoginForm(request.POST or None) if (form.is_valid()): login(request,form.cleaned_data["user"]) messages.success(request,"Başarıyla Giriş Yaptın!") return redirect("index")
return render(request,"login.html",{"form":form})
def register(request):
if (request.user.is_authenticated): messages.error(request,"Giriş Yapılıyken Kayıt Olamazsın!") return redirect("index") form = RegisterForm(request.POST or None)
newUser.set_password(password) newUser.backend = "django.contrib.auth.backends.ModelBackend" newUser.save() send_verification_mail(request,newUser) newUser_profile = Profile(user=newUser,profile_photo="profile_photo/default/default.jpg") newUser_profile.save() messages.success(request,"Hesabınız Oluşturuldu Hesabınızı Aktif Etmek İçin Mail Kutunuzu Kontrol Edin") return redirect("index") return render(request,"register.html",{"form":form})
def send_verification_mail(request,user): current_site = get_current_site(request) # Bu sitenin bilgilerini alır subject = "Email Dogrulama" message = render_to_string("email/email_verification.html",{ # render_to_string, bir Django şablonunu işleyip dönen sonucu bir string (metin) olarak döndürür./NORMAL RENDER İSE, bir Django şablonunu işleyip bir HttpResponse nesnesi döndürür. Bu, işlenmiş şablonu bir HTTP yanıtı olarak tarayıcıya göndermek için kullanılır. 'user': user, 'domain': current_site.domain, # Yukarıda aldığımız bu sitenin domaini 'uid': urlsafe_base64_encode(force_bytes(int(user.pk))), # user objesinin id'sini byte veri tipine çevirip url için güvenli ve uygun olarak base64 olarak tekrar kodlar 'token': default_token_generator.make_token(user), # user objesine özel token oluşturur })
def verify_email(request, uidb64, token): try: uid = urlsafe_base64_decode(uidb64).decode() user = get_object_or_404(User, pk=uid) except (TypeError, ValueError, OverflowError, User.DoesNotExist) as e: user = None
if user and default_token_generator.check_token(user, token): user.is_active = True user.save() messages.success(request, 'E-posta doğrulamanız başarılı. Artık giriş yapabilirsiniz.') return redirect('user:login') else: messages.error(request, 'Geçersiz doğrulama bağlantısı.') return redirect('user:register')
[/code] Я ничего не мог сделать сам, я исследовал это, но не смог найти то, что искал. Примечание: я Я новичок в StackOverflow, простите меня, если я допустил ошибку, задавая свой вопрос.