File size: 932 Bytes
3dee8ac
 
 
d100ebb
3dee8ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d100ebb
 
3dee8ac
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// graphql/context.js
const jwt = require('jsonwebtoken');
const { User } = require('../server');
const { createLoaders } = require('./loaders');

module.exports = async ({ req }) => {
  // استخراج التوكن من الـ Headers
  const authHeader = req.headers.authorization || '';
  const token = authHeader.replace('Bearer ', '');

  let user = null;
  
  if (token) {
    try {
      const decoded = jwt.verify(token, process.env.JWT_SECRET);
      // جلب المستخدم من قاعدة البيانات
      user = await User.findById(decoded.userId)
        .select('username email isAdmin profile')
        .lean();
      
      if (user) {
        user.userId = decoded.userId;
      }
    } catch (error) {
      console.log('Invalid token:', error.message);
    }
  }

  return {
    user,
    userId: user?.userId || null,
    isAdmin: user?.isAdmin || false,
    req,
    loaders: createLoaders(),
  };
};