HomeToolsCode Snippets
📋

Code Snippets

resources

Production-ready snippets for auth, upload, pagination, and more

snippetscodelibraryexamples
🛡️Privacy First: All tools run locally in your browser. Your files never leave your device.
← Back to Tools
🔍

JWT Authentication

Complete JWT auth with refresh tokens

jwtauthexpress
1const jwt = require('jsonwebtoken');
2const bcrypt = require('bcryptjs');
3
4// Generate tokens
5const generateTokens = (userId) => {
6  const accessToken = jwt.sign(
7    { userId, type: 'access' },
8    process.env.JWT_SECRET,
9    { expiresIn: '15m' }
10  );
11  const refreshToken = jwt.sign(
12    { userId, type: 'refresh' },
13    process.env.JWT_REFRESH_SECRET,
14    { expiresIn: '7d' }
15  );
16  return { accessToken, refreshToken };
17};
18
19// Middleware to verify JWT
20const authenticateToken = (req, res, next) => {
21  const authHeader = req.headers['authorization'];
22  const token = authHeader?.split(' ')[1];
23  if (!token) return res.status(401).json({ error: 'No token provided' });
24  try {
25    const decoded = jwt.verify(token, process.env.JWT_SECRET);
26    req.user = decoded;
27    next();
28  } catch (err) {
29    if (err.name === 'TokenExpiredError') {
30      return res.status(401).json({ error: 'Token expired' });
31    }
32    res.status(403).json({ error: 'Invalid token' });
33  }
34};
35
36// Login route
37app.post('/auth/login', async (req, res) => {
38  const { email, password } = req.body;
39  const user = await User.findOne({ email });
40  if (!user || !await bcrypt.compare(password, user.password)) {
41    return res.status(401).json({ error: 'Invalid credentials' });
42  }
43  const tokens = generateTokens(user._id);
44  res.json(tokens);
45});