web-dev-qa-db-fra.com

Comment utiliser Firebase avec Spring boot REST Application?

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? 

    }
23
dickyj

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

9
dickyj

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

17
Maheshwar Ligade