1

현재 스프링 부트 프로젝트에 스프링 - 사회 서명/가입을 추가하고 소셜 네트워크 인증 후 응용 프로그램 인 ConnectionSignUpSignInAdapter의 구현을 통해 내 컨트롤러에서 "/ signup"에 대한 매핑 구현이 필요합니다. 이 방법에서는 기본적으로 ConectionSignUp 메서드에서 이미 구현 한 것과 같습니다. 누구든지이 중복을 피하기 위해 내가 할 수있는 일을 알고 내 컨트롤러에서 하나의 추가 메서드 대신 ConnectionSignUp 클래스로 응용 프로그램을 안내합니까?스프링 부트 프로젝트의 암시 적 사회 가입을위한 구현

내 구현은 지금까지 다음과 같은 클래스가 포함

:

ConnectionSIgnUp

@Component 
public class CustomConnectionSignUp implements ConnectionSignUp { 
    @Autowired 
    private UsuarioDao account; 

    @Autowired 
    private JavaMailSender mailSender; 

    public String execute(Connection<?> connection) { 
    UserProfile profile = connection.fetchUserProfile(); 

    String user; 
    try { 
     Usuario novo = new Usuario(profile.getUsername(),UUID.randomUUID().toString().replaceAll("-", ""),null,null,false,true); 
     account.insert(novo); 
     return novo.getLogin(); 
    } catch (Exception e) { 
     return null; 
    } 
    } 
} 

SignInAdapter

@Component 
public class CustomSignInAdapter implements SignInAdapter { 
    @Autowired 
    private SocialUserDetailsService socialUserDetailsService; 

    public String signIn(String userId, Connection<?> connection, NativeWebRequest request) { 
    SocialUserDetails user = socialUserDetailsService.loadUserByUserId(userId); 
    if(user != null) 
     SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user.getUserId(), null, null)); 
    return null; 
    } 
} 

SocialUserDetailsService

@Service 

    public class CustomSocialUserDetailsService implements SocialUserDetailsService { 
     @Autowired 
     private UsuarioDao account; 

     public SocialUserDetails loadUserByUserId(String userId) { 
     for(Usuario usuario : account.select()) 
      if(usuario.getLogin().equals(userId)) 
      return new SocialUser(usuario.getLogin(), usuario.getSenha(), usuario.isEnabled(), usuario.isAccountNonExpired(), usuario.isCredentialsNonExpired(), usuario.isAccountNonLocked(), usuario.getAuthorities()); 
     return null; 
     } 
    } 

application.properties

# SPRING SOCIAL (SocialWebAutoConfiguration) 
spring.social.auto-connection-views=false 

# SPRING SOCIAL FACEBOOK (FacebookAutoConfiguration) 
spring.social.facebook.app-id=... 
spring.social.facebook.app-secret=... 

# SPRING SOCIAL TWITTER (TwitterAutoConfiguration) 
spring.social.twitter.app-id=... 
spring.social.twitter.app-secret=... 

답변

1

당신이 UsersConnectionRepository로하지 InjectConnectionSignUp를했던 나에게 보인다. 따라서 Spring은 사용자를 sign up 양식으로 페이지로 리디렉션하려고 시도합니다. 암시 적 가입을 수행하려면 ConnectionSignUp 콩을 setConnectionSignUp()에 전달하십시오.