# JWT के साथ Authentication — Fastify

Source: https://www.geekswithgeeks.com/hi/fastify/ff-authentication

> Fastify में token-based authentication implement करें।

## Fastify में JWT flow

1) Client `/login` पर credentials भेजता है। 2) Server verify करके JWT जारी करता है। 3) Client `Authorization: Bearer <token>` में token शामिल करता है। 4) एक preHandler hook routes चलने से पहले token को verify करता है।

## Login और token generation

एक login route बनाएँ जो JWT को sign और return करता है।

```javascript
import jwt from '@fastify/jwt';

await fastify.register(jwt, { secret: process.env.JWT_SECRET });

fastify.post('/login', async (req) => {
  const { email, password } = req.body;
  // Verify credentials (your logic here)
  const user = await verifyUser(email, password);
  
  if (!user) {
    return reply.status(401).send({ error: 'Invalid credentials' });
  }
  
  const token = fastify.jwt.sign({ sub: user.id, email: user.email });
  return { token };
});
```

## Routes की सुरक्षा

Route execution से पहले tokens को verify करने के लिए preHandler उपयोग करें।

```javascript
async function authenticate(request, reply) {
  try {
    await request.jwtVerify();
  } catch (err) {
    reply.status(401).send({ error: 'Unauthorized' });
  }
}

fastify.get('/me', { preHandler: [authenticate] }, async (req) => {
  return { userId: req.user.sub, email: req.user.email };
});
```
