我是这里的新手开发人员。我正在做一个个人项目(React Native+firebase(,其中用户登录流是这样的:
-
每个应用程序用户都有一张身份证,上面以二维码的形式提供了一个唯一的用户id。
-
用户扫描应用程序登录页面中的二维码。
-
如果唯一id与数据库中已存在的用户id匹配,则用户有权访问该应用程序。
请注意,我的应用程序中没有注册。
我很难理解firebase中的实现流程。我如何在firebase中授权用户?有可能使用firebase身份验证吗?
目前,我只是手动查看数据库中是否存在唯一id。如果id与数据库中的id匹配,我允许用户从登录页面导航到其他页面。目前,任何用户都可以对数据库进行任何更改。这是我目前使用的代码:
_login = (status)=> {
if(status === "success") {
this.setState ({
logInStatus: "Login successful!"
})
this.props.navigation.navigate("Question")
}
else {
this.setState ({
logInStatus: "Login failed!"
})
this.props.navigation.navigate("Login")
}
}
//check if user exists in the database
userExists = async (data) => {
this.setState ({
logInStatus: "Logging you in!"
})
//connect to firebase
let userRef = firebase.database().ref('/users/')
let status
try {
let value = await userRef.child(data).once('value', function(snapshot) {
if (snapshot.exists()) {
status = "success"
}
})
}
catch(error) {
this.setState ({
logInStatus: "Login failed. Try again!"
})
console.log("Reached error")
}
this._login(status)
}
//when user has scanned once
_handleBarCodeRead = async ({data})=> {
this.userExists(data)
//stop user from scanning again
this.setState ({
barCodeRead: true,
fullScreen: false,
})
}
显然,这不是一种安全的登录方式。。。什么是更好的选择?
这是我目前使用的数据库结构:
{
"schools": {
"school_001":{
"name": <name>,
"id": <school_id>,
.....other properties unique to the school
},
"school_002": {},
"school_003": {},
.....
"school_N": {}
},
"groups":{
"group_001":{
"group_id": <group ID>,
"school_id": <school ID>,
"members":[array list of group memebers/users]
....other group properties unique to the group
},
"group_002":{},
.....
"group_N":{}
},
"users":{
"user_001":{
"user_id":<user ID>,
"group_id":<group ID>,
"school_id": <school ID>
....other user properties unique to the user
},
"user_002":{},
....
"user_N":{}
},
"activity_feed":{
"school_001":{
"group_001":{
"activity_001":{
"actor": <name of the user>,
"action": <user's action>,
....other properties related to the activity
},
"activity_002":{},
......
},
"group_002":{},
....
},
"school_002":{},
......
}
}
我希望用户只能对自己的用户属性、特定的组属性和组活动提要进行写访问。
你应该把它放在你的firebase安全规则中
{
"rules": {
".read": "auth !== null",
".write": "auth !== null"
}
}