ant-design-pro登录过程

点击登录触发以下方法

 

onFinish={async (values) => {
  await handleSubmit(values as API.LoginParams);
}}
const handleSubmit = async (values: API.LoginParams) => {
    try {
      // 登录
      const user = await login({
        ...values,
        type,
      });
      if (user) {
        const defaultLoginSuccessMessage = '登录成功!';
        message.success(defaultLoginSuccessMessage);
        await fetchUserInfo();
        /** 此方法会跳转到 redirect 参数所在的位置 */
        if (!history) return;
        const {query} = history.location;
        const {redirect} = query as {
          redirect: string;
        };
        //重定向到/路由器将他映射到welcome
        history.push(redirect || '/');
        return;
      }
      // 如果失败去设置用户错误信息
      setUserLoginState(user);
    } catch (error) {
      const defaultLoginFailureMessage = '登录失败,请重试!';
      message.error(defaultLoginFailureMessage);
    }
  };

重写login方法请求后端接口,查询结果不为空则显示登录成功,进行重定向,

路由规则{ path: '/', redirect: '/welcome' },就进入了welcome页面。同时要记录当前用户信息,点击登录后请求welcome页面的时候,调用后端获取用户信息方法,查询到就不重定向,不然就重定向到登录页。

export async function getInitialState(): Promise<{
  settings?: Partial<LayoutSettings>;
  currentUser?: API.CurrentUser;
  loading?: boolean;
  fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
}> {
  const fetchUserInfo = async () => {
    try {
      return await queryCurrentUser();
    } catch (error) {
      history.push(loginPath);
    }
    return undefined;
  };
  // 如果是登录页面或注册页面,则执行
  if (NO_NEED_LOGIN_WHITE_LIST.includes(history.location.pathname)) {
    return {
      fetchUserInfo,
      settings: defaultSettings,
    };
  }
  const currentUser = await fetchUserInfo();
  return {
    fetchUserInfo,
    currentUser,
    settings: defaultSettings,
  };
}
export async function currentUser(options?: { [key: string]: any }) {
  return request< API.CurrentUser>('/api/user/current', {
    method: 'GET',
    ...(options || {}),
  });
}

后端方法:

@Override
    public User getCurrentUser(HttpServletRequest request) {
        Object useObject = request.getSession().getAttribute(USER_LOGIN_STATE);
        User user = (User) useObject;
        if(user == null) {
            return null;
        }
// TODO 校验用户是否合法
        Long userId = user.getId();
        User newUser = userMapper.selectById(userId);
        return getSaftyUser(newUser);
    }

好了,点击登录的时候通过路由跳转到welcome页面,同时获取到当前用户信息就可以进入到welcome页面了。以后有了当前用户信息再访问就不用重新登陆了。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值