No project description provided
Project description
django-graphql-google-accounts
fk django allauth creates 7 tables.
but we need only google accounts and we will only use graphql token authentication.
@@ WARNING @@
+ Create a user table that uses only Google accounts.
+ Use is not recommended unless it is the initial setting.
Table Columns
column |
---|
uid |
nickname |
pitcure |
locale |
is_active |
is_admin |
updated_at |
created_at |
Installation
pip install django-graphql-google-accounts
Setup
configure base settings
add this app and settings
# settings.py
INSTALLED_APPS = [
# ...
'django.contrib.auth',
'django.contrib.sites',
'accounts',
]
AUTHENTICATION_BACKENDS = [
'accounts.auth.backend.GoogleAuthBackend',
'django.contrib.auth.backends.ModelBackend',
]
# ...
ACCOUNTS_SETTINGS = {
# change secret example: https://djecrety.ir/
'token_secret': '^yb9tjg_hif0jym(d42j=vc#kyy=e_t#bjs)xy9y9)=tf&)!-2',
'claim': {
'iss': '', # issuer
'sub': '', # subject
'aud': '', # audience
'exp': 1800, # accessToken expire time seconds
},
'refresh_token_expire': 30, # days / only verify check day
'google': {
'client_id': '<GOOGLE-CLIENT-ID>',
'secret': '<GOOGLE-SECRET>',
'redirect_uri': '/auth/google/callback',
'front_redirect_uri': 'http://localhost:8081/auth/google/callback',
}
}
GRAPHENE = {
"SCHEMA": "core.schema.schema",
'MIDDLEWARE': [
'accounts.middleware.TokenMiddleware'
]
}
AUTH_USER_MODEL = 'accounts.User'
configure urls
# urls.py
from django.urls import path, include
from accounts.views import GoogleLoginView, GoogleCallbackView
urlpatterns = [
# ...
path('login', GoogleLoginView.as_view()),
path('auth/google/callback', GoogleCallbackView.as_view()),
]
Refresh Token
Mutate
Register Schema
# schema.py
import graphene
from accounts.resolver import UserQuery, RefreshTokenMutation
class Mutation(graphene.ObjectType):
refresh_token = RefreshTokenMutation.Field()
schema = graphene.Schema(mutation=Mutation)
HTTP Headers
{
"Authorization": "Bearer <accessToken>"
}
Mutation
mutation {
refreshToken(token: "=0ujbayhl43l6m=vleqpa#&k(jaqlv0-p&qn7jl1#*nv@%v&=+") {
ok
accessToken
refreshToken
}
}
Login Required
verify accessToken timeout and uid
import graphene
# from example.types import ExampleType
from accounts.decorators.define import login_required
class ExampleQuery:
example = graphene.List(ExampleType)
@staticmethod
@login_required
def resolve_example():
return example.objects.all()
Logger (Authenticated Error) print ignore
import logging
from graphql import GraphQLError
class GraphQLLogFilter(logging.Filter):
"""
Filter GraphQL errors that are intentional. See
https://github.com/graphql-python/graphene/issues/513
"""
def filter(self, record):
if record.exc_info:
exc_type, _, _ = record.exc_info
if exc_type == GraphQLError:
return None
if record.stack_info and 'GraphQLError' in record.stack_info:
return None
if record.msg and 'GraphQLLocatedError' in record.msg:
return None
return True
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
# Prevent graphql exception from displaying in console
'filters': {
'graphql_log_filter': {
'()': GraphQLLogFilter,
}
},
'loggers': {
'graphql.execution.utils': {
'level': 'WARNING',
'handlers': ['console'],
'filters': ['graphql_log_filter'],
},
},
}
Admin
default password is email
If the password is empty, save email automatically by django pbk2 encryption.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
File details
Details for the file django_graphql_google_accounts-0.4.21-py3-none-any.whl
.
File metadata
- Download URL: django_graphql_google_accounts-0.4.21-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59c14e42aea71b488575dfa4efe1b74b6215d05d2addbd0f1449c309ea291afb |
|
MD5 | 398791a034dacc29aeda902daf14d4e8 |
|
BLAKE2b-256 | c7afa4a7a83bab02b1d1020694d04ce985161d22fd38956e2c4be4c508ec9b27 |