Capture request.user even if not Django user model

Support authentication setups where the user model does not derive from
Django's AbstractBaseUser or User. Instead accept duck typing and just
abort capturing the user if any of the required attributes are missing.