@@ -93,35 +93,41 @@ public Authentication authenticate(@NonNull Authentication authentication) throw
9393 Long providerUserId = extractProviderUserId (oauth2User );
9494
9595 // 查询用户信息
96- User user = retrieveUser (providerUserId , oauth2User , authorizationCodeAuthenticationToken );
97- UserLoginInfo userLoginInfo = new UserLoginInfo (
98- UUID .randomUUID ().toString (),
99- user != null ? user .getId () : null ,
100- user != null ? user .getUsername () : oauth2User .getAttribute ("login" ),
101- user != null ? user .getPassword () : null ,
102- user != null ? user .getPhone () : null ,
103- user != null ? user .getEmail () : oauth2User .getAttribute ("email" ),
104- user != null ? user .getAccountNonLocked () : null ,
105- user != null ? user .getAccountNonExpired () : null ,
106- user != null ? user .getCredentialsNonExpired () : null ,
107- user != null ? user .getEnabled () : null ,
108- user != null ? user .getMfaSecret () : null ,
109- user != null ? user .getMfaEnabled () : null ,
110- user != null ? mappedAuthorities : null );
96+ User loadedUser = retrieveUser (providerUserId );
11197
11298 // 认证通过,使用 Authenticated 为 true 的构造函数
99+ // 验证用户信息
100+ // 构造成功结果
113101 GitHubOAuth2LoginAuthenticationToken result = new GitHubOAuth2LoginAuthenticationToken (
114102 loginAuthenticationToken .getClientRegistration (),
115103 loginAuthenticationToken .getAuthorizationExchange (),
116- userLoginInfo ,
104+ Optional .ofNullable (loadedUser )
105+ .map (user -> new UserLoginInfo (
106+ UUID .randomUUID ().toString (),
107+ user .getId (),
108+ user .getUsername (),
109+ user .getPassword (),
110+ user .getPhone (),
111+ user .getEmail (),
112+ user .getAccountNonLocked (),
113+ user .getAccountNonExpired (),
114+ user .getCredentialsNonExpired (),
115+ user .getEnabled (),
116+ user .getMfaSecret (),
117+ user .getMfaEnabled (),
118+ authorities ))
119+ .orElse (null ),
117120 mappedAuthorities ,
118- loginAuthenticationToken .getAccessToken (),
119- loginAuthenticationToken .getRefreshToken ());
120- // 必须转化成Map
121- result .setDetails (jsonMapper .convertValue (authentication .getDetails (), Map .class ));
122- log .debug ("用户名认证成功,用户: {}" , userLoginInfo .getUsername ());
123- // 验证用户信息
124- // 构造成功结果
121+ authorizationCodeAuthenticationToken .getAccessToken (),
122+ authorizationCodeAuthenticationToken .getRefreshToken ());
123+ result .setDetails (new GitHubOAuth2Meta (
124+ UserIdentity .Provider .GITHUB ,
125+ providerUserId ,
126+ oauth2User .getAttribute ("login" ),
127+ oauth2User .getAttribute ("name" ),
128+ oauth2User .getAttribute ("email" ),
129+ loadedUser == null ? Boolean .TRUE : Boolean .FALSE ));
130+ log .debug ("用户名认证成功,用户: {}" , Optional .ofNullable (oauth2User .getAttribute ("login" )));
125131 return result ;
126132 }
127133
@@ -143,34 +149,48 @@ public final void setAuthoritiesMapper(GrantedAuthoritiesMapper authoritiesMappe
143149 public boolean supports (@ NonNull Class <?> authentication ) {
144150 return GitHubOAuth2LoginAuthenticationToken .class .isAssignableFrom (authentication );
145151 }
146-
147- protected User retrieveUser (
148- Long providerUserId , OAuth2User oauth2User , GitHubOAuth2AuthorizationCodeAuthenticationToken authentication )
149- throws AuthenticationException {
152+ // protected Authentication createSuccessAuthentication(
153+ // Authentication authentication, User loadedUser, Collection<GrantedAuthority> mappedAuthorities) {
154+ // GitHubOAuth2AuthorizationCodeAuthenticationToken authorizationCodeAuthenticationToken =
155+ // (GitHubOAuth2AuthorizationCodeAuthenticationToken) authentication;
156+ // GitHubOAuth2LoginAuthenticationToken result = new GitHubOAuth2LoginAuthenticationToken(
157+ // authorizationCodeAuthenticationToken.getClientRegistration(),
158+ // authorizationCodeAuthenticationToken.getAuthorizationExchange(),
159+ // Optional.ofNullable(loadedUser)
160+ // .map(user -> new UserLoginInfo(
161+ // UUID.randomUUID().toString(),
162+ // user.getId(),
163+ // user.getUsername(),
164+ // user.getPassword(),
165+ // user.getPhone(),
166+ // user.getEmail(),
167+ // user.getAccountNonLocked(),
168+ // user.getAccountNonExpired(),
169+ // user.getCredentialsNonExpired(),
170+ // user.getEnabled(),
171+ // user.getMfaSecret(),
172+ // user.getMfaEnabled(),
173+ // authorities))
174+ // .orElse(null),
175+ // mappedAuthorities,
176+ // authorizationCodeAuthenticationToken.getAccessToken(),
177+ // authorizationCodeAuthenticationToken.getRefreshToken());
178+ // result.setDetails(new GitHubOAuth2Meta(
179+ // UserIdentity.Provider.GITHUB,
180+ // providerUserId,
181+ // oauth2User.getAttribute("login"),
182+ // oauth2User.getAttribute("name"),
183+ // oauth2User.getAttribute("email"),
184+ // loadedUser == null ? Boolean.TRUE:Boolean.FALSE));
185+ // log.debug("用户名认证成功,用户: {}", Optional.ofNullable(oauth2User.getAttribute("login")));
186+ // return result;
187+ // }
188+ protected User retrieveUser (Long providerUserId ) throws AuthenticationException {
150189 log .debug ("查询GitHub用户: providerUserId={}" , providerUserId );
151190 return userIdentityRepository
152191 .findByProviderUserIdAndProvider (providerUserId , UserIdentity .Provider .GITHUB )
153192 .map (UserIdentity ::getUserId )
154193 .flatMap (userRepository ::findById )
155- .map (user -> {
156- authentication .setDetails (new GitHubOAuth2Meta (
157- UserIdentity .Provider .GITHUB ,
158- providerUserId ,
159- oauth2User .getAttribute ("login" ),
160- oauth2User .getAttribute ("name" ),
161- oauth2User .getAttribute ("email" ),
162- Boolean .FALSE ));
163- return user ;
164- })
165- .orElseGet (() -> {
166- authentication .setDetails (new GitHubOAuth2Meta (
167- UserIdentity .Provider .GITHUB ,
168- providerUserId ,
169- oauth2User .getAttribute ("login" ),
170- oauth2User .getAttribute ("name" ),
171- oauth2User .getAttribute ("email" ),
172- Boolean .TRUE ));
173- return null ;
174- });
194+ .orElse (null );
175195 }
176196}
0 commit comments