2016-04-12 26 views
2

django-otp modülüne bakıyordum ve projemde uygulamak istiyorum. Ama ben birkaç problemle karşılaşıyorum. Anonymous, Authenticated ve Authenticated + Verified: dokümanlar (bunlar) dokümanlar verdik yönteme göreDjango otp nasıl uygulanır?

1), kimlik doğrulama üç seviyeli vardır. Bir kullanıcı zaten django'nun kimlik doğrulama sistemi aracılığıyla zaten doğrulanmışsa, o zaman otp doğrulaması istenecektir (İki yönlü kimlik doğrulama).

Şimdi onu atlamak ve sadece kullanıcı tarafından kimlik doğrulama/doğrulama yapmak istiyorum. Oturum açma istemi yerine kullanıcı bir telefon numarası girecek ve doğrulama için bir giriş yapacaktır (django'nun kimlik doğrulamasını atlamak istiyorum).

2) Ayrıca, yalnızca seçili sayfalarda otp_required kullanmak istiyorum. Yani, web sitemde hem anonim hem de doğrulanmış kullanıcılara sahip olacağım. 3) Uygulamayla ilgili bir örnek bulamadım.

Sorunu, geçerli senaryomda nasıl uygulayacağım.

DÜZENLEME: Settings.py

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'home', 
    'django_otp', 
    'django_otp.plugins.otp_totp', 
    'django_otp.plugins.otp_static', 
] 

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django_otp.middleware.OTPMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 
+0

Bu django-OTP niyet dışında oldukça uzaktır sevdiği görünümlere bu katmalar ekleyin. Özel bir Django kimlik doğrulaması arka uçu yazmak istediğiniz gibi geliyor. – psagers

cevap

1

Sen LoginRequired mixin gibi bir şey kendi Sınıf Tabanlı Görünüm katmalar yazabilir.

class AuthenticationVerificationMixin(AccessMixin): 
    """ 
    CBV mixin which verifies that the current user is authenticated, 
    and has a placeholder for checking if user verified. 
    """ 
    def dispatch(self, request, *args, **kwargs): 
     if not request.user.is_authenticated: 
      return self.handle_no_permission() 
     elif not request.user.is_verified(): 
      # If you need a verification logic it will go here, 
      # for example here's a redirect if you're not verified... 
      # return redirect_to_login(self.request.get_full_path(), '/verify/'), self.get_redirect_field_name()) 
     return super().dispatch(request, *args, **kwargs) 

ve sonra

class MyView(AuthenticationVerificationMixin, TemplateView): 
    ...