From 972ac1ee0f72d485bf99a2740f911f0658009d30 Mon Sep 17 00:00:00 2001 From: "1808837298@qq.com" <1808837298@qq.com> Date: Wed, 25 Sep 2024 17:13:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=AC=AC=E4=B8=89=E6=96=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=B3=A8=E9=94=80=20#500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/github.go | 10 ++++++++++ controller/user.go | 3 ++- model/user.go | 20 ++++---------------- web/src/components/GitHubOAuth.js | 7 +++++-- web/src/components/LoginForm.js | 4 ++++ 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/controller/github.go b/controller/github.go index ee99537..f6d3716 100644 --- a/controller/github.go +++ b/controller/github.go @@ -112,7 +112,9 @@ func GitHubOAuth(c *gin.Context) { user := model.User{ GitHubId: githubUser.Login, } + // IsGitHubIdAlreadyTaken is unscoped if model.IsGitHubIdAlreadyTaken(user.GitHubId) { + // FillUserByGitHubId is scoped err := user.FillUserByGitHubId() if err != nil { c.JSON(http.StatusOK, gin.H{ @@ -121,6 +123,14 @@ func GitHubOAuth(c *gin.Context) { }) return } + // if user.Id == 0 , user has been deleted + if user.Id == 0 { + c.JSON(http.StatusOK, gin.H{ + "success": false, + "message": "用户已注销", + }) + return + } } else { if common.RegisterEnabled { user.Username = "github_" + strconv.Itoa(model.GetMaxUserId()+1) diff --git a/controller/user.go b/controller/user.go index e759123..c78ca87 100644 --- a/controller/user.go +++ b/controller/user.go @@ -159,8 +159,9 @@ func Register(c *gin.Context) { if err != nil { c.JSON(http.StatusOK, gin.H{ "success": false, - "message": err.Error(), + "message": "数据库错误,请稍后重试", }) + common.SysError(fmt.Sprintf("CheckUserExistOrDeleted error: %v", err)) return } if exist { diff --git a/model/user.go b/model/user.go index 1905d89..d016628 100644 --- a/model/user.go +++ b/model/user.go @@ -351,14 +351,6 @@ func (user *User) FillUserByWeChatId() error { return nil } -func (user *User) FillUserByUsername() error { - if user.Username == "" { - return errors.New("username 为空!") - } - DB.Where(User{Username: user.Username}).First(user) - return nil -} - func (user *User) FillUserByTelegramId() error { if user.TelegramId == "" { return errors.New("Telegram id 为空!") @@ -371,23 +363,19 @@ func (user *User) FillUserByTelegramId() error { } func IsEmailAlreadyTaken(email string) bool { - return DB.Where("email = ?", email).Find(&User{}).RowsAffected == 1 + return DB.Unscoped().Where("email = ?", email).Find(&User{}).RowsAffected == 1 } func IsWeChatIdAlreadyTaken(wechatId string) bool { - return DB.Where("wechat_id = ?", wechatId).Find(&User{}).RowsAffected == 1 + return DB.Unscoped().Where("wechat_id = ?", wechatId).Find(&User{}).RowsAffected == 1 } func IsGitHubIdAlreadyTaken(githubId string) bool { - return DB.Where("github_id = ?", githubId).Find(&User{}).RowsAffected == 1 -} - -func IsUsernameAlreadyTaken(username string) bool { - return DB.Where("username = ?", username).Find(&User{}).RowsAffected == 1 + return DB.Unscoped().Where("github_id = ?", githubId).Find(&User{}).RowsAffected == 1 } func IsTelegramIdAlreadyTaken(telegramId string) bool { - return DB.Where("telegram_id = ?", telegramId).Find(&User{}).RowsAffected == 1 + return DB.Unscoped().Where("telegram_id = ?", telegramId).Find(&User{}).RowsAffected == 1 } func ResetUserPasswordByEmail(email string, password string) error { diff --git a/web/src/components/GitHubOAuth.js b/web/src/components/GitHubOAuth.js index c43ed2a..31f0aef 100644 --- a/web/src/components/GitHubOAuth.js +++ b/web/src/components/GitHubOAuth.js @@ -1,8 +1,9 @@ import React, { useContext, useEffect, useState } from 'react'; import { Dimmer, Loader, Segment } from 'semantic-ui-react'; import { useNavigate, useSearchParams } from 'react-router-dom'; -import { API, showError, showSuccess } from '../helpers'; +import { API, showError, showSuccess, updateAPI } from '../helpers'; import { UserContext } from '../context/User'; +import { setUserData } from '../helpers/data.js'; const GitHubOAuth = () => { const [searchParams, setSearchParams] = useSearchParams(); @@ -23,8 +24,10 @@ const GitHubOAuth = () => { } else { userDispatch({ type: 'login', payload: data }); localStorage.setItem('user', JSON.stringify(data)); + setUserData(data); + updateAPI() showSuccess('登录成功!'); - navigate('/'); + navigate('/token'); } } else { showError(message); diff --git a/web/src/components/LoginForm.js b/web/src/components/LoginForm.js index 3cd56a1..d275adc 100644 --- a/web/src/components/LoginForm.js +++ b/web/src/components/LoginForm.js @@ -71,6 +71,8 @@ const LoginForm = () => { if (success) { userDispatch({ type: 'login', payload: data }); localStorage.setItem('user', JSON.stringify(data)); + setUserData(data); + updateAPI() navigate('/'); showSuccess('登录成功!'); setShowWeChatLoginModal(false); @@ -143,6 +145,8 @@ const LoginForm = () => { userDispatch({ type: 'login', payload: data }); localStorage.setItem('user', JSON.stringify(data)); showSuccess('登录成功!'); + setUserData(data); + updateAPI() navigate('/'); } else { showError(message);