package tech.powerjob.server.auth.service.login; import tech.powerjob.server.auth.PowerJobUser; import tech.powerjob.server.auth.common.PowerJobAuthException; import tech.powerjob.server.auth.login.LoginTypeInfo; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Optional; /** * PowerJob 登录服务 * * @author tjq * @since 2024/2/10 */ public interface PowerJobLoginService { /** * 获取全部可登录的类型 * @return 全部可登录类型 */ List fetchSupportLoginTypes(); /** * 获取第三方登录链接 * @param loginType 登录类型 * @param httpServletRequest http请求 * @return 重定向地址 */ String fetchThirdPartyLoginUrl(String loginType, HttpServletRequest httpServletRequest); /** * 执行真正的登录请求,底层调用第三方登录服务完成登录 * @param loginRequest 登录请求 * @return 登录完成的 PowerJobUser * @throws PowerJobAuthException 鉴权失败抛出异常 */ PowerJobUser doLogin(LoginRequest loginRequest) throws PowerJobAuthException; /** * 从 JWT 信息中解析用户登录信息 * @param httpServletRequest httpServletRequest * @return PowerJob 用户 */ Optional ifLogin(HttpServletRequest httpServletRequest); }