我试图创建一个网站(供个人使用),人们可以互相发短信,上传文件/照片等。
我想为数据库中的每个用户生成一个令牌,只是为了识别他们没有昵称。我有一个生成令牌的函数和一个包含所有用户的数据库。
问题是我真的不知道如何检查是否:
a)用户已经存在于数据库中。
b)如果存在,如何给它们分配令牌。
c)如果不创建一个新的,并为它们分配令牌。
这是我的代码,我写的一切JS使用谷歌重火力点
firebase.initializeApp(firebaseConfig);
const db = firebase.database();
const username = prompt("Username:");
const receiver = prompt("Receiver's name:");
document.getElementById("send-message").addEventListener("submit", postChat);
function postChat(e)
{
e.preventDefault();
const timestamp = Date.now();
const chatTxt = document.getElementById("chat-txt");
const message = chatTxt.value;
chatTxt.value = "";
db.ref("messages/" + username + "/" + receiver + "/" + timestamp).set({
usr: username,
msg: message,
});
db.ref("messages/" + receiver + "/" + username + "/" + timestamp).set({
usr: username,
msg: message,
});
}
const fetchChat = db.ref("messages/" + username + "/" + receiver + "/");
fetchChat.on("child_added", function (snapshot)
{
const messages = snapshot.val();
const msg = "<li>" + messages.usr + " : " + messages.msg + "</li>";
document.getElementById("messages").innerHTML += msg;
});
这就是我如何生成一个令牌
function generateAToken()
{
let characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
let token = "";
for(let i = 0; i < 32; i++)
{
let tmp = Math.floor(Math.random() * 62);
token += characters[tmp];
}
}
现在一切都运行得很好,关键是当我在提示符中输入一些东西时,它会立即运行一个函数来解决我上面描述的关键问题。
这就是JSON现在的样子
{
"messages": {
"user1": {
"user2": {
"1656608940603": {
"msg": "hi",
"usr": "user1"
},
"1656608958447": {
"msg": "hey, whats good?",
"usr": "user2"
}
}
},
"user2": {
"user1": {
"1656608940603": {
"msg": "hi",
"usr": "user1"
},
"1656608958447": {
"msg": "hey, whats good?",
"usr": "user2"
}
}
}
}
}
如果用户名和接收者的名字是user1和user2,这里是网站现在的样子。
在这里输入图像描述!
我对环境有点陌生,所以如果有人想帮助使用简单的语言,就像你和孩子说话一样。
祝大家今天愉快;)
一般来说,一个令牌不应该保存在数据库中,
我的想法是:
用户输入用户名和密码;在您的代码中,您将在注册时使用某种算法或库(crypto, JWT)加密密码。
At login -验证用户从数据库(注册阶段)加密的密码与在登录(登录阶段)加密的密码相同。
所以分成点:
-
用户注册表->密码加密后保存在数据库中
-
用户登录->加密后验证密码与当前密码相同。
我希望我说的有意义哈哈。