web-dev-qa-db-ja.com

Spring bootでFirebaseを使用する方法REST Application?

Firebootで行われた認証に依存するSpring Boot RESTアプリケーションがあります。クライアント側でFirebaseはトークンを生成し、Spring Bootではuidを確認する必要があります。しかし、コードはコールバックモードになっているので、タスクを終了できるようにSpring Boot関数を実装するにはどうすればよいですか?

    @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

ここに私自身の質問に答える私自身の試みがあります

@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;

}

以下のコードも試すことができます

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

詳細については [〜#〜] url [〜#〜]https://firebase.google.com/docs/auth/admin/manage-users

9
dickyj

FirebaseとSpringを統合するためのサンプルコードを以下に示します

新しいAdmin SDKでは、以下のコードスニペットを使用するだけでプロセスは簡単です。

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

詳細については、このURLを参照してください https://firebase.google.com/docs/auth/admin/manage-users

これはレガシーコード用です。最初にFirbase依存関係を追加します

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-server-sdk</artifactId>
    <version>3.0.1</version>
</dependency>

サンプルコード

@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;
    }

}

完全な例については、リンクの下のgithubをご覧ください https://github.com/savicprvoslav/Spring-Boot-starter

17