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?
}
ここに私自身の質問に答える私自身の試みがあります
@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
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