rodrigosantosbr

[Flask-Security] ObjectId is not JSON serializable on login

Mar 24th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
import datetime
from bson.objectid import ObjectId
from mongoengine.base import BaseDocument
from mongoengine.queryset.base import BaseQuerySet

class MongoJsonEncoder(JSONEncoder):
    def default(self,obj):
        if isinstance(obj, (datetime.datetime, datetime.date)):
            return obj.isoformat()
        elif isinstance(obj, ObjectId):
            return str(obj)
        elif isinstance(obj,BaseDocument):
            return json_util._json_convert(obj.to_mongo())
        elif isinstance(obj,BaseQuerySet):
            return json_util._json_convert(obj.as_pymongo())
        return JSONEncoder.default(self, obj)

app = Flask(__name__)
app.json_encoder = MongoJsonEncoder

You need to fork flask_security project from Github and change flask_security/decorators.py

  • In def _check_token():

    • Change: identity_changed.send(app, identity=Identity(user.id))
    • To: identity_changed.send(app, identity=Identity(str(user.id)))
  • In def _check_http_auth():

    • Change: identity_changed.send(app, identity=Identity(user.id))
    • To: identity_changed.send(app, identity=Identity(str(user.id)))
Add Comment
Please, Sign In to add comment