From 5b17dedcad5fa392798fa56daf5d1db8f1d20841 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Sun, 6 Oct 2019 13:44:38 -0700 Subject: [PATCH] implement auth with username --- app.py | 3 ++- auth/auth.py | 57 +++++++++++++++++++++++++++++--------------------- models/User.py | 24 +++++++++++---------- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/app.py b/app.py index e2c5604..4a7d7c9 100644 --- a/app.py +++ b/app.py @@ -10,7 +10,8 @@ from flask_cors import CORS def create_app(): app = Flask(__name__) - CORS(app, origins="http://localhost:3004") + CORS(app, resources={r"/api/*": {"origins": "http://localhost:3000"}, + r"/auth/*": {"origins": "http://localhost:3000"}}) app.config['CORS_HEADERS'] = 'Content-Type' app.config.from_object(DevelopmentConfig) db.init_app(app) diff --git a/auth/auth.py b/auth/auth.py index b199d24..af58cc6 100644 --- a/auth/auth.py +++ b/auth/auth.py @@ -10,33 +10,42 @@ def auth_signup(): data = request.get_json() user = User.query.filter_by(email=data.get('email')).first() if not user: - try: - print('getting here 1') - user = User( - email = data['email'], - password = data['password'], - ) - print('getting here 2') - db.session.add(user) - print('wtf') - db.session.commit() - print('user') - auth_token = user.encode_auth_token(user.id) - print('getting here 4') - response = { - 'status': 'success', - 'message': 'Succesfully registered.', - 'auth_token': auth_token.decode() - } - return jsonify(response), 201 - except Exception as e: - print(e.__dict__) + user = User.query.filter_by(username=data.get('username')).first() + if not user: + try: + print('getting here 1') + print(data) + user = User( + username = data['username'], + email = data['email'], + password = data['password'], + ) + print('getting here 2') + db.session.add(user) + print('wtf') + db.session.commit() + print('user') + auth_token = user.encode_auth_token(user.id) + print('getting here 4') + response = { + 'status': 'success', + 'message': 'Succesfully registered.', + 'auth_token': auth_token.decode() + } + return jsonify(response), 201 + except Exception as e: + print(e.__dict__) + response = { + 'status': 'fail', + 'message': 'There was an error. Please try again.' + } + return jsonify(response), 401 + else: # username is taken response = { 'status': 'fail', - 'message': 'There was an error. Please try again.' + 'message': 'User already exists. Please login.' } - return jsonify(response), 401 - else: + else: # email is taken response = { 'status': 'fail', 'message': 'User already exists. Please login.' diff --git a/models/User.py b/models/User.py index 33a61d2..3fd732d 100644 --- a/models/User.py +++ b/models/User.py @@ -1,8 +1,10 @@ from database import db, ma +from marshmallow import fields from app import bcrypt from configuration import config import datetime import enum +import json import jwt class Ranks(enum.Enum): # with minimal Elo rating @@ -58,7 +60,9 @@ class User(db.Model): elo = db.Column(db.Integer) rank_certainty = db.Column(db.Boolean, nullable=False, default=False) - def __init__(self, username, email, password, rank='RU', admin=False): + def __init__(self, username, email, password, rank=Ranks.K1, admin=False): + print(rank) + print(Ranks) self.username = username self.email = email self.password = bcrypt.generate_password_hash( @@ -103,16 +107,14 @@ class User(db.Model): return 'Invalid token. Please log in again.' class UserSchema(ma.ModelSchema): - class Meta: - fields = ( - 'id', - 'username', - 'email', - 'registered_on', - 'rank', - 'rank_certainty', - 'elo' - ) + id = fields.Int() + username = fields.Str() + email = fields.Str() + registered_on = fields.Date() + rank = fields.Str() + rank_certainty = fields.Bool() + elo = fields.Int() + user_schema = UserSchema() users_schema = UserSchema(many=True) \ No newline at end of file