J'ai une application Spring Boot REST qui dépend de l'authentification effectuée dans Firebase. Du côté client, Firebase génère un jeton grâce auquel, dans Spring Boot, je dois vérifier l'ID. Mais j'ai remarqué que le code est en mode de rappel, alors comment implémenter la fonction Spring Boot afin qu'il puisse terminer la tâche?
@RequestMapping(value = "/api/restCall", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public Object restCall(@RequestBody Parameters requestBody) throws Exception {
// idToken comes from the client app (shown above)
String idToken = requestBody.getToken();
Task<FirebaseToken> task = FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
// process the code here
}
});
// how do I return here, since the code is in the onSuccess?
// do I return as a DeferredResult?
}
Voici ma propre tentative de répondre à ma propre question
@RequestMapping(value = "/api/restCall", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public Object restCall(@RequestBody Parameters requestBody,@RequestHeader(value = FIREBASETOKEN, required = true) String idToken) throws Exception {
// idToken comes from the HTTP Header
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdTokenAsync(idToken).get();
final String uid = decodedToken.getUid();
// process the code here
// once it is done
return object;
}
Vous pouvez aussi essayer ci-dessous le code
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
pour plus de détails URL https://firebase.google.com/docs/auth/admin/manage-users
Pour intégrer Firebase à Spring, voici l'exemple de code.
Dans le nouveau Admin SDK, le processus est simple. Il suffit d’utiliser le fragment de code ci-dessous.
FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
Pour plus de détails, visitez cette URL https://firebase.google.com/docs/auth/admin/manage-users
Ceci est pour un code hérité. Ajoutez d'abord la dépendance à Firbase
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-server-sdk</artifactId>
<version>3.0.1</version>
</dependency>
Exemple de code
@Component
public class FirebaseAuthenticationProvider implements AuthenticationProvider {
@Autowired
@Qualifier(value = UserServiceImpl.NAME)
private UserDetailsService userService;
public boolean supports(Class<?> authentication) {
return (FirebaseAuthenticationToken.class.isAssignableFrom(authentication));
}
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
if (!supports(authentication.getClass())) {
return null;
}
FirebaseAuthenticationToken authenticationToken = (FirebaseAuthenticationToken) authentication;
UserDetails details = userService.loadUserByUsername(authenticationToken.getName());
if (details == null) {
throw new FirebaseUserNotExistsException();
}
authenticationToken = new FirebaseAuthenticationToken(details, authentication.getCredentials(),
details.getAuthorities());
return authenticationToken;
}
}
Pour un exemple complet, veuillez consulter le lien ci-dessous dans github https://github.com/savicprvoslav/Spring-Boot-starter