单点登录(基于code)

前后端分离项目:

const singleLogin = async () => {
    const currentUrl = window.location.href;
    const url = SINGLE_LOGIN;
    if (currentUrl.indexOf('code') == -1) {
      window.location.href = url;
    }
  };
  const gotoIndex = async (code: string) => {
    setSubmitting(true);
    try {
      // 登录
      const msg = await singlesLogin(code);
      if (msg.code === '0') {
        message.success('登录成功!');
        setToken(msg.data || '');
        replaceGoto();
        setTimeout(() => {
          refresh();
        }, 0);
        return;
      }
      // 如果失败去设置用户错误信息
      setUserLoginState(msg);
    } catch (error) {
      message.error('登录失败,请重试!');
    }
    setSubmitting(false);
  }
  useEffect(() => {
    let code = getCode(window.location.href)
    console.log(code != '')
    if (code != '') {

      gotoIndex(code)
    }
  }, [])

判断是否第一次登陆(请求参数是否含有code),不包含则去第三方登录,带有code的登录页面请求,直接跳转后台认证(只校验username便于获取角色信息)与授权完成登陆

await outSingleLogin().then(res=>{
    if(res.code=='0'){
    const url = SINGLE_LOGOUT;
    window.location.href = url;
    }
  });
  removeToken();
@PostMapping(value="/outLogin")
    @ResponseBody
    public ApiResult<Object> logout(HttpServletResponse httpServletResponse) {
        if(httpSession.getAttribute("access_token")!=null) {
                String token = httpSession.getAttribute("access_token").toString();
                oAuth2SsoKit.deleteToken(token);
        }
        return ApiResult.SUCCESS;
    }

登出调用第三方sdk删除token,前台跳转登录页面,后面完成客户端系统的正常退出(删除token)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值