我正在使用Firebase,angularfire2
它允许使用Facebook,Google +和Twitter进行身份验证。
现在,当用户像这样进行身份验证时,我得到的响应如下所示。
{
"uid":"someUID",
"displayName":"ivaro18",
"photoURL":"https://lh3.googleusercontent.com/-myPicture/photo.jpg",
"email":"[email protected]",
"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 btw,与Java几乎相同的语法,并且可以运行Java代码)
yes
verficiation completed
ok
然后过一会终止。我希望听众之一被解雇吗?代码有什么问题?
我应该在JSON数组中验证哪个ID FirebaseAuth
?
编辑
uid
JSON的一部分与Firebase身份验证页面(如下所示)中提到的UID相同。
我要检查的值UID
是否等于UID
控制台上的。(最好是发送apiKey
和,accessToken
但是现在检查是否uid
相同就足够了。
试试这个:
import com.google.firebase.FirebaseApp
import com.google.firebase.FirebaseOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseToken
import com.google.firebase.tasks.Task
import com.google.firebase.tasks.Tasks
import java.io.FileInputStream
class Firebase {
val options = FirebaseOptions.Builder()
.setServiceAccount(
FileInputStream("your/url/to/firebase.json")
).setDatabaseUrl("https://your-application.firebaseio.com")
.build()
fun validateToken(accessToken: String) {
val firebaseAuth = FirebaseAuth.getInstance(FirebaseApp.initializeApp(options))
val authTask: Task<FirebaseToken> = firebaseAuth.verifyIdToken(accessToken)
try{
Tasks.await(authTask)
} catch (e: Exception) {
//handle exception
}
// retrieve uid/email/name
authTask.getResult().uid
}
}
就像Stefan所说的,看一下这个Java示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句