/pages/User/Login/index.tsx 登陆页面组件路径
那么我们需要做如下操作改造登陆页面:
最终实现的登陆页面效果如下:
由于此页面主要是调用了ant design pro的模块LoginForm ,具体修改的模块见下方代码。
{/*@umijs/plugin-helmet插件,实现动态修改HTML文档标签*/}{/*实现国际化文字*/}{/* {intl.formatMessage({id: 'menu.login',defaultMessage: '登录页',})}- {Settings.title} */} {flex: '1',padding: '32px 0',}}> {minWidth: 280,maxWidth: '75vw',}}logo={ }// title="Ant Design"title="登陆"// subTitle={intl.formatMessage({id: 'pages.layouts.userLayout.title'})}subTitle='基于React+ant design Pro +Ts的企业级应用'initialValues={{autoLogin: true,}}// actions={[//
,// ,// ]}onFinish={async (values) => {await handleSubmit(values as API.LoginParams);}}>{/* */}{status === 'error' && loginType === 'account' && ( )}{type === 'account' && (<> {size: 'large',prefix: ,}}placeholder={intl.formatMessage({id: 'pages.login.identifier.placeholder',defaultMessage: '请输入用户名',})}rules={[{required: true,message: ( ),},]}/> {size: 'large',prefix: ,}}placeholder={intl.formatMessage({id: 'pages.login.password.placeholder',defaultMessage: '请输入密码',})}rules={[{required: true,message: ( ),},]}/>>)}{/*{status === 'error' && loginType === 'mobile' && }*/}{/*{type === 'mobile' && (*/}{/* <>*/}{/* {*/}{/* size: 'large',*/}{/* prefix: ,*/}{/* }}*/}{/* name="mobile"*/}{/* placeholder={intl.formatMessage({*/}{/* id: 'pages.login.phoneNumber.placeholder',*/}{/* defaultMessage: '手机号',*/}{/* })}*/}{/* rules={[*/}{/* {*/}{/* required: true,*/}{/* message: (*/}{/* */}{/* ),*/}{/* },*/}{/* {*/}{/* pattern: /^1\d{10}$/,*/}{/* message: (*/}{/* */}{/* ),*/}{/* },*/}{/* ]}*/}{/* />*/}{/* {*/}{/* size: 'large',*/}{/* prefix: ,*/}{/* }}*/}{/* captchaProps={{*/}{/* size: 'large',*/}{/* }}*/}{/* placeholder={intl.formatMessage({*/}{/* id: 'pages.login.captcha.placeholder',*/}{/* defaultMessage: '请输入验证码',*/}{/* })}*/}{/* captchaTextRender={(timing, count) => {*/}{/* if (timing) {*/}{/* return `${count} ${intl.formatMessage({*/}{/* id: 'pages.getCaptchaSecondText',*/}{/* defaultMessage: '获取验证码',*/}{/* })}`;*/}{/* }*/}{/* return intl.formatMessage({*/}{/* id: 'pages.login.phoneLogin.getVerificationCode',*/}{/* defaultMessage: '获取验证码',*/}{/* });*/}{/* }}*/}{/* name="captcha"*/}{/* rules={[*/}{/* {*/}{/* required: true,*/}{/* message: (*/}{/* */}{/* ),*/}{/* },*/}{/* ]}*/}{/* onGetCaptcha={async (phone) => {*/}{/* const result = await getFakeCaptcha({*/}{/* phone,*/}{/* });*/}{/* if (!result) {*/}{/* return;*/}{/* }*/}{/* message.success('获取验证码成功!验证码为:1234');*/}{/* }}*/}{/* />*/}{/* >*/}{/*)}*/} {marginBottom: 24,}}> {float: 'right',}}// 点击跳转注册页面onClick={() =>history.push({pathname: '/user/register',})}>注册用户
接下来要对接Strapi登陆模块,主要是点击登陆按钮,触发strapi的login接口,具体为点击登陆按钮后触发handleSubmit函数,此函数逻辑为将用户输入到帐号/密码传入login登陆函数,然后将返回到jwt和user保存到localStorage中去。此后触发fetchUserInfo函数,然后重定向到首页
const handleSubmit = async (values: API.LoginParams) => {try {const msg = await login({identifier: values.identifier, password: values.password});message.success('登陆成功')localStorage.setItem("token", msg.jwt);localStorage.setItem("user", msg.user);await fetchUserInfo();history.push( '/');return;} catch (error) {const defaultLoginFailureMessage = intl.formatMessage({id: 'pages.login.failure',defaultMessage: '登录失败,请重试!',});message.error(defaultLoginFailureMessage);}};
/** 登录接口 POST /api/login/account */ export async function login(body: API.LoginParams, options?: { [key: string]: any }) {return request('/api/auth/local', {method: 'POST',// headers: {// 'Content-Type': 'application/json',// },data: body,...(options || {}),}); }
const fetchUserInfo = async () => {//修改成从local storage获取用户信息const userInfo = localStorage.getItem('user')if (userInfo) {// @ts-ignoresetInitialState({currentUser: userInfo})}};
因此可实现登陆效果