confirmEmail

This commit is contained in:
Untone 2021-07-30 16:22:37 +03:00
parent f04b15c215
commit f868f544d7
2 changed files with 18 additions and 12 deletions

View File

@ -39,11 +39,11 @@ class Authorize:
await redis.execute("DEL", *tokens) await redis.execute("DEL", *tokens)
@staticmethod @staticmethod
async def confirm(token: str) -> str: async def confirm(token: str) -> str, User:
try: try:
# NOTE: auth_token and email_token are different # NOTE: auth_token and email_token are different
payload = Token.decode(token) # TODO: check to decode here the proper way payload = Token.decode(token) # TODO: check to decode here the proper way
auth_token = self.authorize(payload.user) auth_token = self.authorize(payload.user)
return auth_token return auth_token, payload.user
except: except:
pass pass

View File

@ -1,5 +1,5 @@
from graphql import GraphQLResolveInfo from graphql import GraphQLResolveInfo
from datetime import datetime, timedelta
from auth.authenticate import login_required from auth.authenticate import login_required
from auth.authorize import Authorize from auth.authorize import Authorize
from auth.identity import Identity from auth.identity import Identity
@ -12,24 +12,30 @@ from resolvers.base import mutation, query
from settings import JWT_AUTH_HEADER from settings import JWT_AUTH_HEADER
@mutation.field("confirmEmail") @mutation.field("confirmEmail")
async def confirm(*_, token): async def confirm(*_, confirm_token):
token = await Authorize.authorize(user) auth_token, user = await Authorize.confirm(confirm_token)
return { "status": True, "token": token } if auth_token:
user.emailConfirmed = True
return { "status": True, "token": auth_token }
else:
return { "status": False, "error": "Email not confirmed"}
@mutation.field("registerUser") @mutation.field("registerUser")
async def register(*_, email: str, password: str): async def register(*_, email: str, password: str = ""):
inp = { "email": email, "password": password} inp = { "email": email, "password": password}
create_user = CreateUser(**inp) create_user = CreateUser(**inp)
create_user.password = Password.encode(create_user.password)
create_user.username = email.split('@')[0] create_user.username = email.split('@')[0]
user = User.create(**create_user.dict())
if not password: if not password:
# sendAuthEmail(]token) # NOTE: 1 hour confirm_token expire
# TODO: User.password === None and User.emailConfirmed = залогиненный пользователь confirm_token = Token.encode(create_user, datetime.now() + timedelta(hours = 1) , "email")
# TODO: sendAuthEmail(confirm_token)
# без пароля не возвращаем, а высылаем токен на почту # без пароля не возвращаем, а высылаем токен на почту
# #
return { "status": True, "user": user } return { "status": True, "user": user }
else: else:
create_user.password = Password.encode(create_user.password)
user = User.create(**create_user.dict())
token = await Authorize.authorize(user) token = await Authorize.authorize(user)
return {"status": True, "user": user, "token": token } return {"status": True, "user": user, "token": token }