def anonymous_or_real(request):
# do we have an existing user?
if request.user.is_authenticated():
return request.user
else:
# if not, create an anonymous user and log them in
username = IntToLetters(randint(0, maxint))
u = User(username=username, first_name='Anonymous', last_name='User')
u.set_unusable_password()
u.save()
u.username = u.id
u.save()
# comment out the next two lines if you aren't using profiles
p = UserProfile(user=u, anonymous=True)
p.save()
authenticate(user=u)
login(request, u)
return u
######## Anonymous authentication backend middleware #########
from django.contrib.auth.models import User
from myapp.models import UserProfile
class AuthenticationBackendAnonymous:
'''
This is for automatically signing in the user after signup etc.
'''
def authenticate(self, user=None):
# make sure they have a profile and that they are anonymous
# if you're not using profiles you can just return user
if not user.get_profile() or not user.get_profile().anonymous:
user = None
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
Comments
Interesting. This or similar solution might be useful, if you rely on permission checking in templates.
#