Я использую паспорт Js для аутентификации пользователей в моем приложении, я могу создавать пользователей, создавать их учетные данные, и они могут входить без проблем. Для защищенных маршрутов я использую стратегию passport-jwt, и все маршруты работают нормально. Тем не менее, я пытался использовать ту же стратегию паспорта для маршрута, которая создает этих пользователей, но независимо от того, что я делаю, я всегда получаю несанкционированный ответ 401. На внешнем интерфейсе я использую реагировать и ax ios. Вот мой паспортный код:
const opts = {
jwtFromRequest: ExtractJWT.fromAuthHeaderWithScheme("JWT"),
secretOrKey: process.env.JWT_SECRET
};
passport.use(
"jwtToPostUser",
new JWTstrategy(opts, (jwt_payload, done) => {
try {
User.findOne({
where: {
email: jwt_payload.email
}
}).then(user => {
if (user) {
console.log("user found in db in passport");
done(null, user);
} else {
console.log("user not found in db");
done(null, false);
}
});
} catch (err) {
done(err);
}
})
);
Вот маршрут для создания пользователей:
router.post(
"/signup",
passport.authenticate("jwtToPostUser", { session: false }),
(req, res, next) => {
console.log(req.body);
const {
businessname,
username,
firstName,
lastName,
phoneNumber,
email,
password,
customerStatus,
userType,
Gooduntil
} = req.body;
if (password.length < 8) {
throw "Password must be at least 8 characters";
} else {
User.findOne({
where: {
email
}
}).then(user => {
if (user) {
res.send("Email already exists!");
} else {
const encryptedPassword = bcrypt.hashSync(password, salt);
let newUser = {
businessname,
username,
firstName,
lastName,
phoneNumber,
email,
password: encryptedPassword,
customerStatus,
userType,
Gooduntil
};
User.create(newUser)
.then(() => {
// newUser.isAdmin = true
delete newUser.password;
res.send(newUser);
})
.catch(function(err) {
console.log(err);
res.json(err);
});
}
});
}
}
);
Эта JWTstrategy работает для всех маршрутов получения, кроме этого, который создает пользователя .
Вот мой запрос от внешнего интерфейса:
addClient = async e => {
let newUser = {
businessname: businessname.toLowerCase(),
firstName: firstName.toLowerCase(),
lastName: lastName.toLowerCase(),
email,
username,
password,
phoneNumber,
customerStatus: customerStatus.value,
userType,
Gooduntil
};
const accessString = localStorage.getItem("JWT");
await Axios.post(
"/auth/signup",
{
headers: {
Authorization: `JWT ${accessString}`
}
},
newUser
)
.then(res => {
console.log(res);
this.setState({
loadingAxiosReq: false
});
})
.catch(err => console.log(err));
}
Это ошибка, которую я получаю: Ошибка: Запрос не выполнен с кодом состояния 401
Кто-нибудь знаете, почему это происходит? Единственный способ заставить его работать - это удалить стратегию passport-JWT из маршрута регистрации, но это небезопасно. пожалуйста помогите!