diff --git a/reviewboard/accounts/backends/ad.py b/reviewboard/accounts/backends/ad.py
index 380a580e4b4f82c3a4510c10e03e086f529d3d12..625488fccc505e97877a35ecaf3fc66bccd6ab32 100644
--- a/reviewboard/accounts/backends/ad.py
+++ b/reviewboard/accounts/backends/ad.py
@@ -1,6 +1,6 @@
 """Active Directory authentication backend."""
 
-from __future__ import unicode_literals
+from __future__ import absolute_import, unicode_literals
 
 import logging
 
diff --git a/reviewboard/accounts/backends/base.py b/reviewboard/accounts/backends/base.py
index 3baabaa2061c7071abb46809b46edbf83ed8a97f..60b934d8fbd1651db6f9c2c399ff2daad44c7f57 100644
--- a/reviewboard/accounts/backends/base.py
+++ b/reviewboard/accounts/backends/base.py
@@ -5,6 +5,9 @@ from __future__ import unicode_literals
 import re
 import warnings
 
+from django.contrib.auth.models import User
+from djblets.db.query import get_object_or_none
+
 
 class BaseAuthBackend(object):
     """Base class for a Review Board authentication backend."""
@@ -85,6 +88,19 @@ class BaseAuthBackend(object):
         """
         raise NotImplementedError
 
+    def get_user(self, user_id):
+        """Get an existing user.
+
+        Args:
+            user_id:
+                The ID of the user to retrieve.
+
+        Returns:
+            django.contrib.auth.models.User:
+            The resulting user, or ``None`` if one could not be found.
+        """
+        return get_object_or_none(User, pk=user_id)
+
     def update_password(self, user, password):
         """Update a user's password on the backend.
 
