I'm trying to convert an existing project to have a "guest user" experience 
that is very much like a logged in user with some minor differences. Does 
anyone have opinions, or a pointer to some guides about the best practices 
around this?

We already have foreign keys in a few places that point to 
settings.AUTH_USER_MODEL, and AnonymousUser doesn't work there.

TBH all my Django projects have required a login or a completely different 
experience for anonymous users, but it seems like there are lots of 
potential and subtle pitfalls.

Some ideas we're considering:

* class: make a new user class, GuestUser, based on AbstractBaseUser and 
some how have each session create a new one of these (then expire these 
aggressively)
* user: have a single global guestuser that's a real user. I imagine we 
need middleware to make anonymous users become this automatically and 
without a password.
* DB: update models to have a separate foreign key or is_guest_flag to 
indicate a guest user (or the global guest user) and code around this.
* groups: create a batch of users in a special group and "login" anonymous 
sessions to one of these automatically. Works with the usual permissions 
nicely. Has the benefit of letting us have a limit on these, but seems like 
class with a lot of extra work to manage and expire these.

Leading questions:

* How to keep it simple?
* Is there a pre-made solution?
* How do we promote guest users to real users?
* Which approach breaks the least 3rd party packages?

Our current favorite is the class approach. In djangoSHOP they set 
is_active=False and have clearly thought through this in the context of a 
shopping site with extremely important guest shopping-carts (link below).

Related links:

* https://django-shop.readthedocs.io/en/latest/reference/customer-model.html
* 
https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
* 
https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html

Thanks,
/charles

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/bd3d9b4f-e963-49a5-9d03-59388658d295%40googlegroups.com.

Reply via email to