简体   繁体   中英

Automatice login after sign up without admin permission on django

I have an Django app wherein user creates an account and I have to manually approve it on my admin page from them to go live. Is there any option where I could automate this? as in immediately after the user creates an account they should be able to login without waiting for any admin permissions.

@mint

from django.shortcuts import redirect
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.core.exceptions import ImproperlyConfigured, PermissionDenied
from django.utils import six
from allauth.account import views
from django_hosts.resolvers import reverse, reverse_lazy


def host_check(user):
return user.is_host and user.establishment


def establishment_check(user):
return user.is_active and user.is_establishment and user.establishment


def guest_check(user):
return not host_check(user) and user.is_active


class LoginRequiredMixin(object):
def dispatch(self, *args, **kwargs):
    if not self.request.user.is_authenticated():
        params = ''
        for key in self.request.GET:
            params += '%s=%s&' % (key, self.request.GET.get(key))
        next_url = '{0}?{1}'.format(self.request.path, params[:-1]) if params else self.request.path

        return redirect(reverse('login_page', host='guests') + '?next=%s' % next_url)
    return super(LoginRequiredMixin, self).dispatch(*args, **kwargs)


class TOSRequiredMixin(object):
def dispatch(self, *args, **kwargs):
    if not self.request.user.guestprofile.tos_checked:
        if (self.request.user.guestprofile.full_name and
                self.request.user.guestprofile.location and
                self.request.user.guestprofile.phone_number):
            return redirect("guest_tos")
        else:
            return redirect("update_guest")
            pass

    return super(TOSRequiredMixin, self).dispatch(*args, **kwargs)


class GuestRequiredMixin(TOSRequiredMixin):
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
    if not guest_check(self.request.user):
        self.request.user.convert_to_guest()
    return super(GuestRequiredMixin, self).dispatch(*args, **kwargs)


class MEARequiredMixin(LoginRequiredMixin):
@method_decorator(login_required(login_url=reverse_lazy('account_login', host='host')))
def dispatch(self, *args, **kwargs):
    if not self.request.user.establishment.mea_checked:
        return redirect(reverse('merchant_agreement', host='host'))
    return super(MEARequiredMixin, self).dispatch(*args, **kwargs)


class HostRequiredMixin(MEARequiredMixin):
@method_decorator(login_required(login_url=reverse_lazy('account_login', host='host')))
def dispatch(self, *args, **kwargs):
    if not host_check(self.request.user) and self.request.user.is_active:
        if not self.request.user.convert_to_host():
            return redirect(reverse_lazy('user_not_host', host='host'))
    elif host_check(self.request.user) and not self.request.user.is_active:
        return redirect(reverse_lazy('user_not_active', host='host'))
    return super(HostRequiredMixin, self).dispatch(*args, **kwargs)


class EstablishmentRequiredMixin(LoginRequiredMixin):
@method_decorator(login_required(login_url=reverse_lazy('account_login', host='host')))
def dispatch(self, *args, **kwargs):
    if not establishment_check(self.request.user):
        return redirect(reverse_lazy('user_not_host', host='host'))
    return super(EstablishmentRequiredMixin, self).dispatch(*args, **kwargs)


class AuthOwnerMixin(LoginRequiredMixin):
"""
Only request owner should have access
"""
owner_field = "customer"

def get_queryset(self):
    qs = super(AuthOwnerMixin, self).get_queryset()
    return qs.filter(**{self.owner_field: self.request.user})


class AuthEstablishmentMixin(LoginRequiredMixin):
establishment_field = 'establishment'

def get_queryset(self):
    qs = super(AuthEstablishmentMixin, self).get_queryset()
    return qs.filter(**{self.establishment_field: self.request.user.establishment})


class PermissionRequiredMixin(LoginRequiredMixin):
permission_required = None
permission_denied_message = 'You have not permission.'

def get_permission_required(self):
    if self.permission_required is None:
        raise ImproperlyConfigured(
            '{0} is missing the permission_required attribute. Define {0}.permission_required, or override '
            '{0}.get_permission_required().'.format(self.__class__.__name__)
        )
    if isinstance(self.permission_required, six.string_types):
        perms = (self.permission_required,)
    else:
        perms = self.permission_required
    return perms

def has_permission(self):
    perms = self.get_permission_required()
    return self.request.user.has_perms(perms)

def dispatch(self, request, *args, **kwargs):
    if not self.has_permission():
        raise PermissionDenied(self.permission_denied_message)
    return super(PermissionRequiredMixin, self).dispatch(request, *args, **kwargs)


class BetterLoginView(views.LoginView):
def get_initial(self):
    initial = super(BetterLoginView, self).get_initial()
    if 'email' not in initial and 'email' in self.request.GET:
        initial['login'] = self.request.GET.get('email')
    return initial


views.login = BetterLoginView.as_view()


class BetterPasswordResetDoneView(BetterLoginView):
template_name = views.PasswordResetDoneView.template_name


views.password_reset_done = BetterPasswordResetDoneView.as_view() 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM