Skip to content

📙OAuth2 GitHub 로그인 & GitHub Api 사용 연습📙

Notifications You must be signed in to change notification settings

BeomjunLee/OAuth2-Github-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 

Repository files navigation

OAuth2 Github 연동 및 Github Api 사용

oAuth2 로그인의 자세한 내용은 블로그에 포스팅하였습니다 https://blog.naver.com/qjawnswkd/222293370027

Gradle

//spring security oauth2
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'

//github api
implementation group: 'org.kohsuke', name: 'github-api', version: '1.125'

application.yml

## OAuth2
spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: {클라이언트 id}
            client-secret: {클라이언트 secret}       

Service OAuth2

@Service
@RequiredArgsConstructor
public class CustomOAuth2MemberService implements OAuth2UserService{

    private final MemberRepository memberRepository;
    private final HttpSession session;

    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {

        DefaultOAuth2UserService service = new DefaultOAuth2UserService();
        OAuth2User oAuth2User = service.loadUser(userRequest);

        Member member = saveOrUpdate(oAuth2User);

        session.setAttribute("oAuthToken", userRequest.getAccessToken().getTokenValue());

        return new DefaultOAuth2User(
                Collections.singleton(new SimpleGrantedAuthority(member.getRole())),
                oAuth2User.getAttributes(), "login");
        //nameAttributeKey = Principal name에 저장됨
    }

    public Member saveOrUpdate(OAuth2User oAuth2User) {
        Member oAuthMember = Member.builder()
                .username(oAuth2User.getAttribute("login"))
                .name(oAuth2User.getAttribute("name"))
                .picture(oAuth2User.getAttribute("avatar_url"))
                .role(MemberRole.USER)
                .build();

        Member member = memberRepository.findByUsername(oAuthMember.getUsername())
                .map(entity -> entity.update(oAuthMember))
                .orElse(oAuthMember);
        return memberRepository.save(member);
    }
}

OAuth2 Result


Github Api 사용 example

//로그인시 얻어지는 accessToken 값과, 유저이름으로 Github api 접근
//GitHub를 통해 다양한 api 에 접근할 수 있다.
GitHub gitHub = new GitHubBuilder()
                .withOAuthToken(session.getAttribute("oAuthToken").toString(), oAuth2User.getName()).build(); 
                
//accessToken 이용 안할시 1시간에 50번만 호출 가능하고 이용시에는 5000번까지 가능하다		
GHUser user = gitHub.getUser(oAuth2User.getName()); 
//repo 이름으로 찾기 예시
GHRepository repository = user.getRepository("microservices-spring-cloud"); 
 
 //아이디 로그인 없이 그냥 불러올수 있다 (1시간 50번 요청 제한)
GitHub git = new GitHubBuilder().build(); 
//로그인 안할시에는 repo 검색시 앞에 유저이름이 필수로 들어가야한다.
GHRepository repository = git.getRepository("BeomjunLee/microservices-spring-cloud"); 

//등등 다양한 Github api 를 불러올수 있다.

몇가지 예제를 적자면


GHUser 를 통해 다양한 api 요청 메서드에 접근할 수 있다.


특정 repo 에 접근해서 커밋과 전체 커밋 갯수를 확인할 수 있다.



특정 repo 의 기여자들 리스트와 커밋 현황을 확인할 수 있다.


외에 다양한 api 를 사용할 수 있다.

About

📙OAuth2 GitHub 로그인 & GitHub Api 사용 연습📙

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published