Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将Firebase与Spring boot REST应用程序一起使用?_Java_Rest_Firebase_Spring Boot_Firebase Authentication - Fatal编程技术网

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

Java 如何将Firebase与Spring boot REST应用程序一起使用?,java,rest,firebase,spring-boot,firebase-authentication,Java,Rest,Firebase,Spring Boot,Firebase Authentication,我有一个SpringBootREST应用程序,它依赖于在Firebase中完成的身份验证 在客户端Firebase生成一个令牌,在Spring引导中,我需要验证UID 但是代码处于回调模式,那么如何实现该函数以便它能够完成任务呢 @RequestMapping(value = "/api/restCall", method = RequestMethod.POST, consumes = "application/json",

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

在客户端Firebase生成一个令牌,在Spring引导中,我需要验证
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?
}
@RequestMapping(value=“/api/restCall”,method=RequestMethod.POST,
consumes=“application/json”,products=“application/json”)
公共对象restCall(@RequestBody参数RequestBody)引发异常{
字符串idToken=requestBody.getToken();
Task Task=FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(FirebaseToken已解码){
字符串uid=decodedToken.getUid();
}
});
return“?”;//这里返回什么?
}

成功后如何返回<代码>延迟结果?

以下是我自己尝试回答的问题

@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.");

有关将Firebase与Spring集成的更多详细信息,请参见下面的示例代码

在新的ADMINSDK中,这个过程很简单,只需使用下面的代码片段即可

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");
有关更多详细信息,请访问此URL

这是一个遗留代码。 首先添加Firbase依赖项

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

com.google.firebase
使用CRUD操作完成BlogPost:

但这不是spring的方式。您可以指导如何从HTTP头发送idToken吗?只需设置任何HTTP属性,并通过请求头读取即可。请注意,这只是推荐的方法之一。此API现在已被弃用,取而代之的是新的Firebase Admin SDK。您可能需要更新您的代码。GitHub源代码非常有用,但一些见解肯定会有用。我有项目设置,但无法访问或使用任何API。。
@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;
    }

}