use*_*948 9 google-app-engine firebase google-cloud-endpoints firebase-authentication firebase-realtime-database
我的设置:
我的意图是移动客户端应用程序的用户将能够使用Firebase身份验证登录到移动应用程序,然后连接到任何后端API,后端API将执行一些处理,然后读取或写入数据到/从Firebase数据库.
为了保护服务器上的API,我想我必须使用Firebase Server SDK的内置verifyIdToken()方法(请参阅验证 Firebase上的ID令牌)来解码从客户端应用程序传递的用户ID令牌.由于verifyIdToken()以异步方式运行,我如何将其与GAE中的API方法集成?到目前为止,我有类似于以下内容:
@ApiMethod(name = "processAndSaveToDB", httpMethod = "post")
public Response processAndSaveToDB(@Named("token") String token) {
Response response = new Response();
// Check if the user is authenticated first
FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
// do bulk of processAndSaveToDB() method
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// throw unauthorized exception
});
return response;
}
Run Code Online (Sandbox Code Playgroud)
由于此身份验证任务在任务队列中异步运行,您可以等到该任务结束并以同步方式继续,您可以选择在onSuccess,onFailure和onComplete上添加侦听器.
Task<FirebaseToken> authTask = FirebaseAuth.getInstance().verifyIdToken(idToken)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Object tr) {//do smtg }
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception excptn) {//do smtg }
}).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Task task) {//do smtg }
});
try {
Tasks.await(authTask);
} catch(ExecutionException | InterruptedException e ){
//handle error
}
FirebaseToken decodedToken = authTask.getResult();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1312 次 |
最近记录: |