Ver código fonte

Merge branch 'master' of http://git.choozmo.com:3000/zooey/ntcri

MIA 1 ano atrás
pai
commit
6328c65d19
3 arquivos alterados com 25 adições e 14 exclusões
  1. 22 13
      app/api/users.py
  2. 2 0
      app/models/models.py
  3. 1 1
      app/session.py

+ 22 - 13
app/api/users.py

@@ -37,10 +37,10 @@ async def query_user(user_id: str):
     :param user_id: E-Mail of the user
     :return: None or the user object
     """
-    result = User.filter(email=user_id).first()
+    result = await User.filter(email=user_id,is_gmail=0).first()
     if not result:
-        print('[]')
-        return []
+        print('無此筆資料')
+        return None
     return result
 
 
@@ -53,8 +53,9 @@ async def query_user_username(user_id: str):
     """
     result = await User.filter(username=user_id).first()
     if not result:
-        print('[]')
-        return []
+        print('無此筆資料')
+        return None
+
     return result
 
 
@@ -85,17 +86,21 @@ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="https://oauth2.googleapis.com/tok
 
 CLIENT_ID = settings.CLIENT_ID
 @users.post("/login/google/access-token")
-async def login(db: Session = Depends(deps.get_db), data: OAuth2PasswordRequestForm = Depends(), add_time_code: Optional[str] = None
+async def login(username: str = Form(default=''), password: str = Form(default=''), email: str = Form(default='')
     ) -> Any:
     """
     OAuth2 compatible token login, get an access token for future requests
     """
-    user = await User.filter(username=data.username).first()
+
+    user = await User.filter(email=email,is_gmail=1).first() # 確認信箱是否已存在
     if not user:
-        u = await User.create(username=data.username, password=data.password)
+        u = await User.create(username=username, password=password, email=email, is_gmail=1)
+    # if user:
+    #     print('已用相同信箱註冊過,再開一個GMAIL帳號')
+    #     u = await User.create(username=username, password=password,email=email,is_gmail=1)
 
     access_token = manager.create_access_token(
-        data={'sub': data.username}
+        data={'sub': username}
     )
     return_msg = {
         "access_token": access_token,
@@ -128,20 +133,20 @@ async def add(username: str = Form(default=''), password: str = Form(default='')
     if username and password and email:
         user_email = await query_user(email)
         user_username = await query_user_username(username)
-        if user_email or user_username:
+        if user_email and user_username:
             return {"msg":"該信箱或使用者名稱已存在","code":403}
         # elif user_username:
         #     return {"msg":"該使用者名稱已存在","code":403}
         else:
             if password == re_password:
                 hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
-                u = await User.create(username=username, password=hashed_password, email=email)
+                u = await User.create(username=username, password=hashed_password, email=email,is_superuser=0,is_gmail=0)
                 if u:
                     message = '註冊成功'
                     subject = '註冊信'
                     print(message)
                     send_email(email,message,subject)
-                    return {"msg": "註冊成功", "code": 200}
+                    return {"msg": "已寄送註冊信", "code": 200}
             else:
                 return {"msg":"確認密碼錯誤","code":403}
 
@@ -294,4 +299,8 @@ async def delete(id: int):
 
     return {"msg": "failed", "code": 400}
 
-print('12334')
+
+@users.get("/information")
+async def get_information(email:str,is_gmail:int):
+    result = await User.filter(email=email, is_gmail=is_gmail).first()
+    return {"msg":result, "code":200}

+ 2 - 0
app/models/models.py

@@ -8,6 +8,8 @@ class User(Model):
     password = fields.CharField(max_length=128, description="密碼")
     email = fields.CharField(max_length=128, description="信箱")
     points = fields.IntField(description="點數")
+    is_superuser = fields.IntField(description="超級使用者")
+    is_gmail = fields.IntField(description="是否使用gmail登入")
 
 #學校
 class Schools(Model):

+ 1 - 1
app/session.py

@@ -9,4 +9,4 @@ password = "pAssw0rd"
 host = "db.ptt.cx:3306"
 db_name = "test"
 engine = create_engine(f'mysql://{user}:{password}@{host}/{db_name}', pool_pre_ping=True)
-SessionLocal = sessionmaker(autocommit=False, autoflush=True, bind=engine)
+SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)