[go: up one dir, main page]

Skip to content

Commit

Permalink
登录支持人机验证
Browse files Browse the repository at this point in the history
  • Loading branch information
Calcium-Ion committed Nov 6, 2023
1 parent af8827d commit a0b975f
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 9 deletions.
3 changes: 0 additions & 3 deletions controller/misc.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,6 @@ func GetStatus(c *gin.Context) {
"wechat_qrcode": common.WeChatAccountQRCodeImageURL,
"wechat_login": common.WeChatAuthEnabled,
"server_address": common.ServerAddress,
"pay_address": common.PayAddress,
"epay_id": common.EpayId,
"epay_key": common.EpayKey,
"price": common.Price,
"turnstile_check": common.TurnstileCheckEnabled,
"turnstile_site_key": common.TurnstileSiteKey,
Expand Down
2 changes: 1 addition & 1 deletion router/api-router.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func SetApiRouter(router *gin.Engine) {
userRoute := apiRouter.Group("/user")
{
userRoute.POST("/register", middleware.CriticalRateLimit(), middleware.TurnstileCheck(), controller.Register)
userRoute.POST("/login", middleware.CriticalRateLimit(), controller.Login)
userRoute.POST("/login", middleware.CriticalRateLimit(), middleware.TurnstileCheck(), controller.Login)
//userRoute.POST("/tokenlog", middleware.CriticalRateLimit(), controller.TokenLog)
userRoute.GET("/logout", controller.Logout)
userRoute.GET("/epay/notify", controller.EpayNotify)
Expand Down
2 changes: 1 addition & 1 deletion web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,5 @@
"singleQuote": true,
"jsxSingleQuote": true
},
"proxy": "https://nekoapi.com"
"proxy": "http://localhost:3000"
}
30 changes: 28 additions & 2 deletions web/src/components/LoginForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ import React, { useContext, useEffect, useState } from 'react';
import { Button, Divider, Form, Grid, Header, Image, Message, Modal, Segment } from 'semantic-ui-react';
import { Link, useNavigate, useSearchParams } from 'react-router-dom';
import { UserContext } from '../context/User';
import { API, getLogo, showError, showSuccess, showWarning } from '../helpers';
import {API, getLogo, showError, showInfo, showSuccess, showWarning} from '../helpers';
import { onGitHubOAuthClicked } from './utils';
import Turnstile from "react-turnstile";

const LoginForm = () => {
const [inputs, setInputs] = useState({
Expand All @@ -15,6 +16,9 @@ const LoginForm = () => {
const [submitted, setSubmitted] = useState(false);
const { username, password } = inputs;
const [userState, userDispatch] = useContext(UserContext);
const [turnstileEnabled, setTurnstileEnabled] = useState(false);
const [turnstileSiteKey, setTurnstileSiteKey] = useState('');
const [turnstileToken, setTurnstileToken] = useState('');
let navigate = useNavigate();
const [status, setStatus] = useState({});
const logo = getLogo();
Expand All @@ -27,6 +31,10 @@ const LoginForm = () => {
if (status) {
status = JSON.parse(status);
setStatus(status);
if (status.turnstile_check) {
setTurnstileEnabled(true);
setTurnstileSiteKey(status.turnstile_site_key);
}
}
}, []);

Expand All @@ -37,6 +45,10 @@ const LoginForm = () => {
};

const onSubmitWeChatVerificationCode = async () => {
if (turnstileEnabled && turnstileToken === '') {
showInfo('请稍后几秒重试,Turnstile 正在检查用户环境!');
return;
}
const res = await API.get(
`/api/oauth/wechat?code=${inputs.wechat_verification_code}`
);
Expand All @@ -58,9 +70,13 @@ const LoginForm = () => {
}

async function handleSubmit(e) {
if (turnstileEnabled && turnstileToken === '') {
showInfo('请稍后几秒重试,Turnstile 正在检查用户环境!');
return;
}
setSubmitted(true);
if (username && password) {
const res = await API.post(`/api/user/login`, {
const res = await API.post(`/api/user/login?turnstile=${turnstileToken}`, {
username,
password
});
Expand Down Expand Up @@ -109,6 +125,16 @@ const LoginForm = () => {
value={password}
onChange={handleChange}
/>
{turnstileEnabled ? (
<Turnstile
sitekey={turnstileSiteKey}
onVerify={(token) => {
setTurnstileToken(token);
}}
/>
) : (
<></>
)}
<Button color='green' fluid size='large' onClick={handleSubmit}>
登录
</Button>
Expand Down
8 changes: 6 additions & 2 deletions web/src/components/SystemSetting.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,12 @@ const SystemSetting = () => {
}
let PayAddress = removeTrailingSlash(inputs.PayAddress);
await updateOption('PayAddress', PayAddress);
await updateOption('EpayId', inputs.EpayId);
await updateOption('EpayKey', inputs.EpayKey);
if (inputs.EpayId !== '') {
await updateOption('EpayId', inputs.EpayId);
}
if (inputs.EpayKey !== '') {
await updateOption('EpayKey', inputs.EpayKey);
}
await updateOption('Price', "" + inputs.Price);
};

Expand Down

0 comments on commit a0b975f

Please sign in to comment.