Реализация неявной социальной регистрации в весенне-загрузочном проекте

Путем добавления Spring-Social Signin / Signup в мой текущий проект Spring-boot, через реализацию классов ConnectionSignUp а также SignInAdapterприложение после авторизации на веб-сайте социальной сети требует установки сопоставления для "/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 ответ

Мне кажется, что ты не сделал InjectConnectionSignUp в UsersConnectionRepository, Поэтому Spring пытается перенаправить пользователя на страницу с формой регистрации. Для выполнения неявной регистрации попробуйте передать свой ConnectionSignUp фасоль для setConnectionSignUp(),

Другие вопросы по тегам