Code: Select all
package com.Oauth.OauthBackend.services.JwtService.UserService;
import java.util.Optional;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
import com.Oauth.OauthBackend.exceptionHandler.CustomException;
import com.Oauth.OauthBackend.models.Users;
import com.Oauth.OauthBackend.repository.UserRepository;
import com.Oauth.OauthBackend.services.JwtService.JwtService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@Component
public class UserSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
private final JwtService jwtService;
private final UserRepository repository;
public UserSuccessHandler(JwtService jwtService, UserRepository repository) {
this.jwtService = jwtService;
this.repository = repository;
}
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) {
try {
System.out.println("come here");
OAuth2User oAuth2User = (OAuth2User) authentication.getPrincipal();
String email = oAuth2User.getAttribute("email");
Object id = oAuth2User.getAttribute("id");
String gitId = String.valueOf(id);
String claim = (email != null) ? email : gitId;
Users user;
Optional userOptional = (email != null) ?
repository.findByEmail(claim) :
repository.findByGitID(claim);
if (userOptional.isEmpty()) {
throw new CustomException("User not found", 404);
}
user = userOptional.get();
String accessToken = jwtService.generateAccessToken(claim);
String refreshToken = jwtService.generateRefreshToken(user.getId());
user.setRefreshToken(refreshToken);
repository.save(user);
// Redirect back to app with token
String deepLink = "myapp://page2?token=ACCESS_TOKEN&uid=USER_ID"
.replace("ACCESS_TOKEN", accessToken)
.replace("USER_ID", user.getId());
response.sendRedirect(deepLink);
System.out.println(deepLink);
System.out.println("accessToken is " + accessToken);
} catch (Exception e) {
throw new CustomException("Error processing authentication success", 500);
}
}
}
.Replace("access_Token ", AccessToken)
.Replace (accessToken)
Replace (actoken); In UserSuccessHandler, OnAuthenticationsCess.