我目前正在编写一个android应用程序。在我的应用程序中,用户可以对一些对象进行评级。数据(对象和评级)将存储在Google中,特别是Firestore。我已经将我的应用程序链接到Firebase,并实现了com.google.android.gms.auth.api.signin
以获得当前用户的GoogleSignInAccount
。
我想将数据保存到数据库中,如下所示:
SomeObject: | objectId | name |
ObjectRating: | ratingId | objectId | userId | rating |
我不确定的是,将什么保存为userId。GoogleSignInAccount.getId()
的文档显示:
注意:不要使用此返回的Google将当前已登录的用户与后端服务器通信。相反,发送一个ID令牌(requestIdToken(String)),它可以在服务器上安全地验证;或者发送服务器auth代码(requestServerAuthCode(String)),该代码可以依次交换为id令牌。
所以我不应该用这个。但是推荐的IdToken
是签名的,所以我认为每次调用该方法时都会有所不同。
大多数人所做的就是在数据库中创建一个用户目录。但是,从应用程序中,我希望获得用户的评分,以及给定对象的所有用户的总体平均评分。因此,我认为将评级分割到多个用户表中会使总体平均评分的计算更加复杂。
我的问题是:如何将ObjectRating链接到用户,而不使用不安全的getId()
,同时仍然能够通过objectId选择所有的ObjectRatings来计算平均评分?
发布于 2017-10-13 10:55:51
要获得用户的唯一标识符,可以使用FirebaseAuth
获取FirebaseUser
对象:
FirebaseAuth.getInstance().getCurrentUser().getUid();
getUid()
方法:
返回一个字符串,用于唯一标识Firebase项目的用户数据库中的用户。当将信息存储在Firebase数据库或存储中,甚至在您自己的后端中时,请使用它。
在调用 to authenticate with Firebase之前,需要确保您已经拥有了getCurrentUser()
,否则它将返回null
。
https://stackoverflow.com/questions/46727967
复制相似问题