Hello everyone,
I’m currently learning how to build full stack web applications with register and login systems. The problem I’m facing is as follows:
When a new user registers or an existing user signs in, via the client side, the user is successfully saved in my local mongodb database, along with the auth tokens assigned to them; but when redirecting the user to the main page soon after logging in, the server can’t seem to remember if said user already has an authentication token. So the client side simply responds with “Please Authenticate”
I don’t really know where I’m getting it wrong.
Please find the necessary code below:
auth .js file:
const jwt = require('jsonwebtoken')
const User = require('../models/user')
const auth = async (req, res, next) => {
try {
const token = req.header('Authorization').replace('Bearer ', '')
const decoded = jwt.verify(token, 'thisismynewcourse')
const user = await User.findOne({ _id: decoded._id, 'tokens.token': token })
if (!user) {
throw new Error()
}
req.token = token
req.user = user
next()
} catch (e) {
res.status(401).send({ error: 'Please authenticate.' })
}
}
module.exports = auth
user router file - registering new user:
router.post('/users', async (req, res) => {
const user = new User(req.body)
try {
await user.save()
const token = await user.generateAuthToken()
res.redirect('/users/game-options')
//res.status(201).send({ user, token })
} catch (e) {
res.status(400).send(e)
}
})
user router file - signing in user:
router.post('/users/login', async (req, res) => {
try {
const user = await User.findByCredentials(req.body.email, req.body.password)
const token = await user.generateAuthToken()
res.redirect('/users/game-options')
//res.send({ user, token })
} catch (e) {
res.status(400).send()
}
})
game-options-redirect:
router.get('/users/game-options', auth, async (req, res) => {
res.render('main.ejs')
})
database screenshot:
From the database screenshot, you can see that the user already has multiple tokens, but the client side keeps responding with “please authenticate”
Client side screenshots:
Kindly let me know where I’m getting it wrong.