Authentication
Authentication is managed using Flask-Security.
Edmunds already implements some of the features of Flask-Security to get you started.
Settings
You can set your authentication preferences in the settings:
from flask_security import SQLAlchemyUserDatastore
from app.database.models.user import User
from app.database.models.role import Role
SECURITY_PASSWORD_HASH = 'sha512_crypt'
SECURITY_TRACKABLE = True
APP = {
    'auth':
    {
        'enabled': True,
        'instances':
        [
            {
                'name': 'authsqlalchemy',
                'driver': SQLAlchemyUserDatastore,
                'models': {
                    'user': User,
                    'role': Role,
                },
            },
        ],
    },
}
You can have multiple user datastores by defining them as instances. Each instance will have their own models.
The available drivers are:
- SQLAlchemyUserDatastore: User management using SQLAlchemy
User- and Role-Model
Both the user- and role-model can use the predefined mixins of Edmunds. The mixins already define the default columns for your database-structure.
# app/database/role.py
from edmunds.auth.models.rolemixin import RoleMixin
from edmunds.database.db import db
class Role(db.Model, RoleMixin):
    # __tablename__ = 'role'
    # __bind_key__ = 'users'
    pass
# app/database/user.py
from edmunds.database.db import relationship, backref
from edmunds.auth.models.usermixin import UserMixin
from app.database.models.role import Role
from app.database.models.userroles import UserRolesTable
from edmunds.database.db import db
class User(db.Model, UserMixin):
    # __tablename__ = 'user'
    # __bind_key__ = 'users_database'
    roles = relationship(Role, backref=backref('users', lazy='dynamic'), secondary=UserRolesTable)
Usage
Fetch the flask_security.Security instance for your config-defined instance: 
security_instance = app.auth_security()
security_instance = app.auth_security(name='authsqlalchemy')
Fetch the flask_security.datastore.UserDatastore instance for your
config-defined instance: 
userdatastore_instance = app.auth_userdatastore()
userdatastore_instance = app.auth_userdatastore(name='authsqlalchemy')
userdatastore_instance = app.auth_security(name='authsqlalchemy').datastore