У меня проблема с аутентификацией пользователя после входа. Это часть расширения моих знаний, и теперь я застрял с этим.
Мой код выглядит так:
Маршрут:
const express = require('express');
const router = express.Router();
/* import controllers */
const {
findById,
isAuth,
isAdmin,
} = require('../controllers/user.controller.js');
const { requierSignin } = require('../controllers/auth.controller.js');
router.param('userId', findById);
router.get('/test/:userId', requierSignin, isAuth, findById, (req, res) => {
res.json({ user: req.profile });
});
Здесь я должен войти, найти пользователя по идентификатору и моему методу авторизации. Это тестовый маршрут. Как я говорю о своих контроллерах: Пользователь:
const User = require('../models/user.models');
//user middleware
exports.findById = async (req, res, next, id) => {
try {
let user = await User.findById(id).exec();
if (!user) {
return res.status(401).json({
errors: [
{
msg: 'User not found',
},
],
});
}
req.profile = user; // this will get user profile based on User
next();
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
};
/* check if user is authenticated */
exports.isAuth = (req, res, next) => {
/* id we have user that will send id and is auth */
let user = req.profile && req.auth && req.profile._id == req.auth._id;
console.log(req.profile);
console.log('auth', req.auth);
console.log('id', req.profile._id);
console.log('user', user);
if (!user) {
return res.status(403).json({
errors: [
{
msg: 'Access Denied',
},
],
});
}
next();
};
и мой метод входа из auth.controller
const config = require('config');
const jwt = require('jsonwebtoken'); //generate token
const expressJwt = require('express-jwt'); //auth check
const User = require('../models/user.models');
const secret = config.get('jwtSecret');
exports.requierSignin = expressJwt({
secret,
userProperpty: 'auth',
});
Это только часть этого кода, но если остальные будут нужны, я будет обновлять его, насколько я получаю. Пользователь авторизуется, и получение профиля работает. Но я хочу защитить другие профили пользователей с помощью isAuth. Это заставляет меня "Доступ запрещен". Из журнала консоли я получил
auth undefined
id 5eaac004200b95869cc76531
user undefined
GET /api/test/5eaac004200b95869cc76531 403 88.591 ms - 36
Но когда я изменил в своем методе isAuth, пользователь будет только:
let user = req.profile
пользователь определен.
Не уверен, что я здесь отсутствует: / Не знаю, почему я не получаю свой «auth» ._id, и это вызывает проблемы
github repo