django-authtools-patch 1.8.1
Custom user model app for Django featuring email as username and class-based views for authentication.
License: BSD

django-authtools
================

.. image:: https://travis-ci.org/fusionbox/django-authtools.png
   :target: http://travis-ci.org/fusionbox/django-authtools
   :alt: Build Status


A custom user model app for Django 1.11+ that features email as username and
other things. It tries to stay true to the built-in user model for the most
part.

The main differences between authtools's User and django.contrib.auth's are
email as username and class-based auth views.

Read the `django-authtools documentation
<https://django-authtools.readthedocs.org/en/latest/>`_.

Quickstart
==========

Before you use this, you should probably read the documentation about `custom
User models
<https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model>`_.

1.  Install the package:

    .. code-block:: bash

        $ pip install django-authtools

2.  Add ``authtools`` to your ``INSTALLED_APPS``.

3.  Add the following to your settings.py:

    .. code-block:: python

        AUTH_USER_MODEL = 'authtools.User'

4.  Add ``authtools.urls`` to your URL patterns:

    .. code-block:: python

        urlpatterns = patterns('',
            # ...
            url(r'^accounts/', include('authtools.urls')),
            # ...
        )

5.  Enjoy.


CHANGES
=======

2.0.0 (unreleased)
------------------

- ** BREAKING ** Drop support for Django versions earlier than 2.0
- Fix bug where request is not properly set on AuthenticationForm (#102)
- Fix bug where request not passed through on PasswordResetConfirmAndLoginView (#103)
- Make UserAdmin compatible with Django 2.0
  - Fixes a bug where the password change link would not format correctly
  - Fixes a bug where BetterReadOnlyPasswordWidget would not work on a view only permission


1.7.0 (2019-06-26)
------------------

- Fix bug when using Django 1.11 where resetting a password when already logged in
  as another user caused an error
- Remove support for Django versions below 1.11 and Python below 2.7 and 3.6


1.6.0 (2017-06-14)
------------------

- Add support for Django 1.9, 1.10, 1.11 (Jared Proffitt #82)
- Remove old conditional imports dating as far back as Django 1.5
- Update readme


1.5.0 (2016-03-26)
------------------

- Update various help_text fields to match Django 1.9 (Wenze van Klink #51, Gavin Wahl #64, Jared Proffitt #67, Ivan VenOsdel #69)
- Documentation fixes (Yuki Izumi #52, Pi Delport #60, Germán Larraín #65)
- Made case-insensitive tooling work with more than just USERNAME_FIELD='username' (Jared Proffitt, Rocky Meza #72, #73)


1.4.0 (2015-11-02)
------------------

- Dropped Django 1.7 compatibility (Antoine Catton)
- Add Django 1.8 compatibility (Antoine Catton, Gavin Wahl, #56)
- **Backwards Incompatible:** Remove 1.6 URLs (Antoine Catton)
- **Backwards Incompatible:** Remove view functions

1.3.0 (unreleased)
------------------

- Added Django 1.7 compatibility (Antoine Catton, Rocky Meza, #35)
- ``LoginView.disallow_authenticated`` was changed to ``LoginView.allow_authenticated``
- ``LoginView.disallow_authenticated`` was deprecated.
- **Backwards Incompatible:** ``LoginView.allow_authenticated`` is now ``True``
  by default (which is the default behavior in Django)
- Create migrations for authtools.

  If updating from an older authtools, these migrations must be run on your apps::

    $ python manage.py migrate --fake authtools 0001_initial

    $ python manage.py migrate


1.2.0 (2015-04-02)
------------------

- Add CaseInsensitiveEmailUserCreationForm for creating users with lowercased email address
  usernames (Bradley Gordon, #31, #11)
- Add CaseInsensitiveEmailBackendMixin, CaseInsensitiveEmailModelBackend for authenticating
  case-insensitive email address usernames (Bradley Gordon, #31, #11)
- Add tox support for test running (Piper Merriam, #25)


1.1.0 (2015-02-24)
------------------

- PasswordChangeView now handles a ``next`` URL parameter (#24)

1.0.0 (released August 16, 2014)
--------------------------------

- Add friendly_password_reset view and FriendlyPasswordResetForm (Antoine Catton, #18)
- **Bugfix** Allow LOGIN_REDIRECT_URL to be unicode (Alan Johnson, Gavin Wahl, Rocky Meza, #13)
- **Backwards Incompatible** Dropped support for Python 3.2

0.2.2 (released July 21, 2014)
------------------------------

- Update safe urls in tests
- Give the ability to restrain which users can reset their password
- Add send_mail to AbstractEmailUser. (Jorge C. Leitão)


0.2.1
-----

- Bugfix: UserAdmin was expecting a User with a `name` field.

0.2.0
-----

- Django 1.6 support.

  Django 1.6 `broke backwards compatibility
  <https://docs.djangoproject.com/en/dev/releases/1.6/#django-contrib-auth-password-reset-uses-base-64-encoding-of-user-pk>`_
  of the ``password_reset_confirm`` view. Be sure to update any references to
  this URL. Rather than using a separate view for each encoding, authtools uses
  `a single view
  <https://django-authtools.readthedocs.org/en/latest/views.html#authtools.views.PasswordResetConfirmView>`_
  that works with both.

- Bugfix: if LOGIN_URL was a URL name, it wasn't being reversed in the
  PasswordResetConfirmView.

0.1.2 (released July 01, 2013)
------------------------------

- Use ``prefetch_related`` in the
  `UserChangeForm <https://django-authtools.readthedocs.org/en/latest/forms.html#authtools.forms.UserChangeForm>`_
  to avoid doing hundreds of ``ContentType`` queries. The form from
  Django has the same feature, it wasn't copied over correctly in our
  original form.

0.1.1 (released May 30, 2013)
-----------------------------

* some bugfixes:

- Call ``UserManager.normalize_email`` on an instance, not a class.
- ``authtools.models.User`` should inherit its parent's ``Meta``.

0.1.0 (released May 28, 2013)
-----------------------------

- django-authtools