如何将 Firebase 与 Spring boot REST 应用程序一起使用?

新手上路,请多包涵

我有一个 Spring Boot REST 应用程序,它依赖于在 Firebase 中完成的身份验证。

在客户端,Firebase 生成一个令牌,在 Spring Boot 中,我需要验证 UID

但是代码是回调模式,那么如何实现函数才能完成任务呢?

 @RequestMapping(value = "/api/restCall", method = RequestMethod.POST,
             consumes = "application/json", produces = "application/json")
public Object restCall(@RequestBody Parameters requestBody) throws Exception {
    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();
                }
            });
    return "???"; // what return here?
}

我如何在 onSuccess 之后返回? DeferredResult

原文由 dickyj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 629
2 个回答

这是我自己尝试回答自己的问题

@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

原文由 dickyj 发布,翻译遵循 CC BY-SA 4.0 许可协议

将 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 带有 CRUD 操作的完整博客文章: https ://medium.com/techwasti/spring-boot-firebase-crud-b0afab27b26e

原文由 Maheshwar Ligade 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题