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, showInfo } from '../helpers'; const LoginForm = () => { const [inputs, setInputs] = useState({ username: '', password: '', wechat_verification_code: '', }); const [searchParams, setSearchParams] = useSearchParams(); const [submitted, setSubmitted] = useState(false); const { username, password } = inputs; const [userState, userDispatch] = useContext(UserContext); let navigate = useNavigate(); const [status, setStatus] = useState({}); const logo = getLogo(); useEffect(() => { if (searchParams.get("expired")) { showError('未登录或登录已过期,请重新登录!'); } let status = localStorage.getItem('status'); if (status) { status = JSON.parse(status); setStatus(status); } }, []); const [showWeChatLoginModal, setShowWeChatLoginModal] = useState(false); const onGitHubOAuthClicked = () => { window.open( `https://github.com/login/oauth/authorize?client_id=${status.github_client_id}&scope=user:email` ); }; const onWeChatLoginClicked = () => { setShowWeChatLoginModal(true); }; const onSubmitWeChatVerificationCode = async () => { const res = await API.get( `/api/oauth/wechat?code=${inputs.wechat_verification_code}` ); const { success, message, data } = res.data; if (success) { userDispatch({ type: 'login', payload: data }); localStorage.setItem('user', JSON.stringify(data)); navigate('/'); showSuccess('登录成功!'); setShowWeChatLoginModal(false); } else { showError(message); } }; function handleChange(e) { const { name, value } = e.target; setInputs((inputs) => ({ ...inputs, [name]: value })); } async function handleSubmit(e) { setSubmitted(true); if (username && password) { const res = await API.post(`/api/user/login`, { username, password, }); const { success, message, data } = res.data; if (success) { userDispatch({ type: 'login', payload: data }); localStorage.setItem('user', JSON.stringify(data)); navigate('/'); showSuccess('登录成功!'); } else { showError(message); } } } return (
用户登录
忘记密码? 点击重置 ; 没有账户? 点击注册 {status.github_oauth || status.wechat_login ? ( <> Or {status.github_oauth ? (
); }; export default LoginForm;