-------------
Released never
- (:pr:`53`) Use Security.render_template in mails too (noirbizarre `opr 487 <https://github.com/mattupstate/flask-security/pull/487>`_)
- (:pr:`56`) Optimize DB accesses by using an SQL JOIN when retrieving a user. (nfvs `opr 679 <https://github.com/mattupstate/flask-security/pull/679>`_)
- (:pr:`57`) Add base template to security templates (grihabor `opr 697 <https://github.com/mattupstate/flask-security/pull/697>`_)
- (:pr:`73`) datastore: get user by numeric identity attribute (jirikuncar `opr 633 <https://github.com/mattupstate/flask-security/pull/633>`_)
- (:pr:`58`) bugfix: support application factory pattern (briancappello `opr 703 <https://github.com/mattupstate/flask-security/pull/703>`_)
- (:pr:`60`) Make SECURITY_PASSWORD_SINGLE_HASH a list of scheme ignoring double hash (noirbizarre `opr 714 <https://github.com/mattupstate/flask-security/pull/714>`_)
- (:pr:`61`) Allow custom login_manager to be passed in to Flask-Security (jaza `opr 717 <https://github.com/mattupstate/flask-security/pull/717>`_)
- (:pr:`62`) Docs for OAauth2-based custom login manager (jaza `opr 727 <https://github.com/mattupstate/flask-security/pull/727>`_)
- (:pr:`63`) core: make the User model check the password (mklassen `opr 779 <https://github.com/mattupstate/flask-security/pull/779>`_)
- (:pr:`64`) Customizable send_mail (abulte `opr 730 <https://github.com/mattupstate/flask-security/pull/730>`_)
- (:pr:`68`) core: fix default for UNAUTHORIZED_VIEW (jirijunkar `opr 726 <https://github.com/mattupstate/flask-security/pull/726>`_)
These should all be backwards compatible.
Possible compatibility issues:
- 487 - prior to this, render_template() was overridable for views, but not
emails. If anyone actually relied on this behavior, this has changed.
- 703 - get factory pattern working again. There was a very complex dance between
Security() instantiation and init_app regarding kwargs. This has been rationalized (hopefully).
- 679 - SqlAlchemy SQL improvement. It is possible you will get the following error::
Got exception during processing: <class 'sqlalchemy.exc.InvalidRequestError'> -
'User.roles' does not support object population - eager loading cannot be applied.
This is likely solvable by removing ``lazy='dynamic'`` from your Role definition.
Performance improvements:
- 679 - for sqlalchemy, for each request, there would be 2 DB accesses - now
there is one.
Testing:
For datastores operations, Sqlalchemy, peewee, pony were all tested against sqlite,
postgres, and mysql real databases.