Я новичок здесь.Я работаю над личным проектом (React Native + firebase), где поток входа пользователя выглядит примерно так:
У каждого пользователя приложения уже есть идентификационная карточка с уникальным идентификатором пользователя, предоставленным дляих в виде QR-кода.
Пользователь сканирует QR-код на странице входа в приложение.
Если уникальный идентификаторсовпадает с идентификатором пользователя, уже присутствующим в базе данных - пользователь авторизован для доступа к приложению.
Обратите внимание, что в моем приложении нет регистрации.
У меня естьпроблемы с пониманием того, как будет выглядеть поток реализации в firebase.Как авторизовать пользователя в firebase?Можно ли использовать для этого firebase-auth?
В настоящее время я просто вручную проверяю, существует ли уникальный идентификатор в базе данных.Я разрешаю пользователю переходить со страницы входа на другие страницы, если идентификатор совпадает с идентификатором, присутствующим в базе данных.Любой пользователь может вносить любые изменения в базу данных в настоящее время.Вот код, который я использую в настоящее время:
_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":{},
......
}
}
Я хочу, чтобы пользователи имели доступ на запись только к своим собственным свойствам пользователя, определенным свойствам группы и фиду активности группы.