【发布时间】:2016-12-09 15:56:06
【问题描述】:
我正在使用 firebase 和 angularfire2,它允许使用 Facebook、Google+ 和 Twitter 进行身份验证。
现在,当用户像这样进行身份验证时,我会收到如下所示的响应。
{
"uid":"someUID",
"displayName":"ivaro18",
"photoURL":"https://lh3.googleusercontent.com/-myPicture/photo.jpg",
"email":"myEmail@gmail.com",
"emailVerified":true,
"isAnonymous":false,
"apiKey":"aUUIDApiKey",
"appName":"[DEFAULT]",
"authDomain":"mydemo.firebase.com",
"stsTokenManager":{
"apiKey":"aUUIDApiKey",
"refreshToken":"AHugeRefreshToken",
"accessToken":"aHugeAccessToken",
"expirationTime":1481297860666
},
"redirectEventId":null
}
身份验证有效并且可以检索用户数据(省略providerData,因为它在 JSON 中没有用 - 不会被使用)
我会将此 uid 或 apiKey 发送到我的 REST API(通过 Angular2 的 http.post),但为了防止中间人攻击,我想验证令牌。
所以(编辑:添加了if 和isComplete
@JvmStatic fun main(args: Array<String>) {
println("yes")
val options = FirebaseOptions.Builder()
.setServiceAccount(
FileInputStream("C:/Users/ivaro18/firebase.json")
).setDatabaseUrl("https://myDemo.firebaseio.com")
.build()
FirebaseApp.initializeApp(options)
if(
FirebaseAuth.getInstance().verifyIdToken("whatToken?")
.addOnSuccessListener(OnSuccessListener<FirebaseToken>() {
@Override
fun onSuccess(decodedToken: FirebaseToken) {
val uid = decodedToken.getUid()
println("UID:::" + uid)
}
})
.addOnFailureListener(OnFailureListener() {
@Override
fun onFailure(e: Exception) {
e.printStackTrace()
}
})
.addOnCompleteListener(OnCompleteListener<FirebaseToken>() {
@Override
fun onComplete(token: FirebaseToken) {
println("Token: " + token)
}
}).isComplete()) {
println("verification completed");
}
println("ok")
}
但是这段代码输出(顺便说一句,Kotlin,几乎与 Java 相同的语法,它可以运行 Java 代码)
yes
verficiation completed
ok
然后在一段时间后终止。我希望其中一位听众开火?代码有什么问题?
我应该在 FirebaseAuth 中验证该 JSON 数组中的哪个 ID?
编辑
JSON 的 uid 部分与 Firebase 身份验证页面中提到的 UID 相同(如下所示)
我想检查UID 是否等于控制台上的UID。 (最好发送apiKey 和accessToken,但现在只检查uid 是否相同就足够了。
【问题讨论】:
-
如果我不得不猜测,我会怀疑
FirebaseAuth实例在侦听器被触发之前不会使主线程保持活动状态(因此您的程序在第二个println之后终止)。您是否尝试过添加while循环以等待操作完成(例如:使用isComplete? -
将语句包装在
if(.....verfifyToken........isComplete()){ println("complete"); }中打印yescompleteok我将使用新代码编辑问题 -
isSuccesful返回false并在 JSON 对象中找到每个id -
这是一个java示例:stackoverflow.com/questions/38418472/…
标签: java firebase angularfire2