第三方登陆.md 1.8 KB

除了我们一般情况下直接使用账号密码登陆以外,我们还需要兼容微信小程序登陆,微信公众号登陆。如果还有特殊的需求,可能还有谷歌登陆,qq登陆,facebook登陆等。

一般的,我们通过第三方系统进行登陆,第三方系统一般会返回一个类似于userId的东西,用于区分登陆的是哪个用户,如微信登陆会返回openid。我们只要将openid和我们的userid进行关联即可

在表tz_app_connect 存储的就是第三方登陆的登陆信息和本地的用户id关联信息。

我们想要知道如何确定第三方用户是本地的哪个用户的,就要看 AppLoginAuthenticationFilter

public class AppLoginAuthenticationFilter extends YamiAuthenticationProcessingFilter {
    ------ 省略 ------
    // 如果是/appLogin说明是要进行第三方登陆
    super("/appLogin");
    ------ 省略 ------
    // 根据第三方系统的类型,进行登陆,并返回用户信息
    appLoginService.loginAndGetUserDetails(authentication);
    ------ 省略 ------
}

我们看下微信小程序登陆的代码:

public class MaAppLoginServiceImpl implements AppLoginService {

    // 如果是小程序登陆,小程序会返回一个code,用这个code获取小程序的openid,通过openid确定用户
    String code = authentication.getPrincipal();
    // 获取openid
    WxMaJscode2SessionResult session = wxConfig.getWxMaService().getUserService().getSessionInfo(code);
    // 根据openid找到在系统中的用户
    YamiUser yamiUser = yamiUserDetailsService.loadUserByAppConnect(appConnect);

}

上面是登陆的代码,那么第三方用户是在什么时候和我们系统的用户进行绑定的呢?

我们看下用户注册的相关接口com.yami.shop.api.controller.UserRegisterController#register()