Django-allauth와 hCaptcha 통합

13694 단어 djangopythonwebdev


누군가가 봇을 사용하여 시스템을 악용하고 임의의 사람들에게 자동 가입/암호 재설정을 보내는 경우 문제가 발생할 수 있습니다. 따라서 hCaptcha는 봇을 피하는 정말 좋은 방법입니다.

hCaptcha 계정 설정


  • 먼저 새 hCaptcha 계정이 필요합니다. 계정이 없으면 https://dashboard.hcaptcha.com/signup에서 계정을 만드십시오.
  • 그런 다음 hCaptcha 대시보드의 사이트 페이지https://dashboard.hcaptcha.com/sites로 이동해야 합니다.
  • 그런 다음 새 사이트를 만들고 원하는 이름을 지정할 수 있습니다. 그런 다음 생성한 사이트 옆에 있는 설정 아이콘을 클릭합니다. 사이트 키가 표시됩니다. 그것을 복사하여 누군가에게 보관하십시오.
  • https://dashboard.hcaptcha.com/settings에서 계정 설정으로 이동한 다음 비밀 키를 복사하여 보관하십시오.

  • hCaptcha 설치



    우리는 pypi에서 django-hCaptcha 패키지를 사용할 것입니다.
  • 다음 명령을 사용하여 설치합니다.

  • pip install django-hCaptcha
    


  • 다음과 같이 INSTALLED_APPS 설정에 "hcaptcha"를 추가합니다.

  • # project/settings.py
    
    INSTALLED_APPS = [
        ...
        'hcaptcha',
    ]
    


  • 이전에 settings.py 파일에 보관했던 사이트 키 및 비밀 키를 추가합니다.

  • # project/settings.py
    
    ...
    HCAPTCHA_SITEKEY = '<your sitekey>'
    HCAPTCHA_SECRET = '<your secret key>'
    ...
    


    양식에 hCaptcha 추가


  • 기본 allauth 형식 확장
    나는 같은 이유로 geeksforgeeks의 이 기사를 참조했습니다.
    https://www.geeksforgeeks.org/python-extending-and-customizing-django-allauth/
  • 임의의 django 앱 폴더에 forms.py 파일을 만듭니다.


  • # app/forms.py
    
    from allauth.account.forms import SignupForm, ResetPasswordForm
    from hcaptcha.fields import hCaptchaField
    
    
    class CustomSignupForm(SignupForm):
        hcaptcha = hCaptchaField(theme='dark')
        # if the order of fields isn't as you expected ,then you can use field_order
        #field_order = ['username', 'email', 'password1', 'password2', 'hcaptcha']
        #customize this according to your form                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
    
    class CustomForgetPassword(ResetPasswordForm):
        hcaptcha = hCaptchaField(theme='dark')
    


  • settings.py 파일에서 선언하여 기본 양식으로 지정합니다.

  • # project/settings.py
    ...
    ACCOUNT_FORMS = {
        'signup': '<app>.forms.MyCustomSignupForm',
        'reset_password': '<app>.forms.CustomForgetPassword',}
    ...
    


    모두 완료 🎉



    축하해요

    좋은 웹페이지 즐겨찾기