Comments (2)
Let's discuss adding support for CharField
, which flax-id uses.
TextField
is essentially "CharField
so large that I don't want to bother specifying a max_length. I expect a PK to have constant length so I'm not sure it makes sense to support
TextField` here. Let's wait for someone to actually need it.
Coming back to CharField
, the question is "how to encode it in the sesame token".
Currently django-sesame is able to encode / decode integers and UUID, which are fixed length — 4 bytes and 16 bytes respectively. The token format is designed to be as compact as possible (because long URLs are ugly, get truncated accidentally, etc.) So django-sesame just reads the expected number of bytes from the token. There's nothing else.
Since strings are variable length, the most generic format would be 1 byte for the length of the UTF-8 encoded string, followed by the UTF-8 encoded string. (Supporting only up to 255 characters would be an acceptable limitation for an user id that ends up in a URL.)
This wouldn't be optimal for flax-id, though:
- IDs are fixed length, so there's no need for the length byte
- It would be best to use IDs in the "12 bytes" form rather than in the "16 URL-safe characters" form because django-sesame always base64-encodes the whole token to make it URL-safe, and there's no point doing it twice
There's no way django-sesame can determine and handle all this, so the only way to allow these optimizations is to make the packer configurable.
To sum up:
- I'd like to support custom packers in addition to the three natively supported packers — then you can do the optimal thing for flax-id if you want
- I'm unsure about adding a
CharField
packer (andBinaryField
, which would be the same, minus the UTF-8 encoding). As shown above, the generic implementation is unlikely to be the best implementation in most cases. Most users certainly care a lot more about having something that works and a lot less about having something optimal than I do...
from django-sesame.
This is great! Thank you 🌟
from django-sesame.
Related Issues (20)
- Backporting for django 1.x and python 2.x HOT 1
- Support dynamic max_age HOT 15
- get_parameters not working in Django 3.2 HOT 5
- Using JWT Authentication with Sesame HOT 1
- Webmail Links Not Working HOT 1
- Document the release process
- Django admin does not log in after adding Middleware HOT 10
- Rename master branch to main HOT 1
- sesame tokens seem to be missing a bunch of entropy on my Django installation (first characters are all 'AAAAAA' HOT 3
- Login view request HOT 11
- Is ModelBackend actually needed? HOT 2
- Expired Token: enhance user journey HOT 2
- Support changing signature length HOT 1
- Add support for SECRET_KEY_FALLBACKS
- Typo in tutorial for Login by email
- Deprecated dependencies HOT 2
- minimum ua parser version HOT 2
- SESAME_PRIMARY_KEY_FIELD=uuid does not allow login HOT 2
- Add an option to invalidate magic links on email change HOT 4
- override_settings doesn't update sesame settings HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-sesame.