Comments (5)
Thank you, @sinisaos , I had similar ideas, but thought, maybe this (customizable User
class) could be point of improvement for piccolo.
from piccolo_api.
@Akkarine if u are interested in combining session auth + custom user model, u can try smth like this:
Session Model and logic
User model and login method
Using this in Piccolo Admin GUI
from piccolo_api.
Thanks for the kind words.
I think you need to override the login method.
For example:
from piccolo.apps.user.tables import BaseUser
class User(BaseUser, tablename='piccolo_user'):
@classmethod
async def login(cls, username: str, password: str) -> t.Optional[int]:
# authenticate the user via the blockchain
if check_my_blockchain_service(username, password):
user = await cls.objects().get(cls.username == username)
if not user:
user = cls.create_user(
username=username,
password=password,
active=True,
admin=True, # only if you want to give them access to Piccolo admin
superuser=True # only if you want to have super user privileges in Piccolo admin
)
return user.id
else:
return None
# Pass this BaseUser subclass into any session auth middleware or endpoints, for example:
from piccolo_api.session_auth.endpoints import session_login
from fastapi import FastAPI
app = FastAPI()
app.mount('/login/', session_login(auth_table=User))
from piccolo_api.
Thank you for answer.
But what if I don't need a password
field at all? Like I will have only OpenID authorization? How can I remove some fields?
I mean, what if BaseUser
would be just empty class (or just with id
Field, needed for sessions), that I can inherit and completely rewrite it in main app (including id
field, want it to be uuid), so sessions could accept also custom User
model?
from piccolo_api.
@Akkarine The main problem is that BaseUser
requires fields username and password (create_user() method) and session auth depends on BaseUser
. You can try this.This basically saves the Google user as a Piccolo BaseUser
, and later you can use it as a normal BaseUser
with session auth.
Here is another example (Vue frontend, but it doesn't matter) where I used fake password for register Google user as BaseUser to satisfy Pydantic validation on backend and creation of Piccolo BaseUser
which requires password field. After that you can use session auth.
I hope you find something usefull in this examples.
from piccolo_api.
Related Issues (20)
- Python 3.11 support
- Extend `db_exception_handler` to handle not-null exceptions
- CRUD Endpoint POST response is a list HOT 9
- Starlite support HOT 17
- Feature Request: Instead of just exposing the crud endpoints, can it generate the actual methods in a file? HOT 2
- Be able to sort by multiple columns in `PiccoloCRUD`
- Add `allow_unauthenticated` to `JWTMiddleware`
- TypeError: __init__() got an unexpected keyword argument 'excluded_paths' HOT 5
- Feature to modify body and query_parameters in `PiccoloCRUD` HOT 8
- Fix code scanning alert - Unused global variable
- Batch version of the get endpoint HOT 6
- Drop Python 3.7 support
- Catch foreign key constraint errors in `PiccoloCRUD`
- `schema_extra` param not passed to `pydantic_model_{output | optional | plural}` methods HOT 1
- Piccolo Admin API docs are not rendering
- Better error display on PATCH request
- Alpha version for Pydantic 2.0 / Piccolo 1.0a1? HOT 2
- PiccoloCRUD `post_single` return id of the inserted row instead of the row HOT 3
- Add `ne` operator
- Python 3.12 support
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 piccolo_api.