I am unable to understand what should I do to prevent multiple login of same user. I am using google login with firebase in my React Node App with JWT token. How to make user logged out if login from other browser or other device. Is there any library that handle this or any way I can achieve this? I have checked many links but thee is no specific way of doing this.
Middleware auth
const auth = async (req, res, next) => {
try {
const token = req.headers.authorization.split(" ")[1];
let decodedData = verifyToken(token);
req.userId = decodedData?.id;
next();
} catch (error) {
console.log(error);
throw new Error()
}
};
This is how I am verfying the token
export const verifyIdToken = async (idToken) => {
try {
return await admin.auth().verifyIdToken(idToken);
} catch (e) {
console.log(e);
throw new Error(e)
}
}
Controller auth.js
export const signin = async (req, res) => {
try {
const code = req.body.code;
let profile = await verifyIdToken(code);
const newUser = {
uid: profile.uid,
name: profile.name,
email: profile.email,
userBrowser: req.headers["user-agent"],
isLoggedIn: true
};
if(newUser.isLoggedIn)
{
console.log("user is logged in wth browser");
}
else
{
isLoggedIn: true
};
let user = await db.aggregate('USER', query);
user = user[0];
if (!user) {
user = await db.create('USER', newUser);
}
const token = generateToken(user);
res.status(200).json({ user, token });
} catch (err) {
console.log(err)
res.status(500).json({ message: "Something went wrong" });
}
};
export const refreshToken = async (req, res) => {
try {
let user = await db.aggregate('USER', query);
user = user[0];
const token = generateToken(user);
res.status(200).json({ user, token });
} catch (err) {
console.log(err)
res.status(500).json({ message: "Something went wrong" });
}
};
I have added the code, i am able to save data in db but how to check about the isLoggedIn function and logout user from first browser if loggedin from other browser? please help