В настоящее время я работаю над полным стековым приложением для реагирования на денежные переводы, использующим реагирующую и нативную для клиента и нод для сервера. У меня проблема с аутентификацией всех запросов с токеном JWT при отправке серверных вызовов от создателей действий. У меня есть несколько конечных точек, таких как (SignIn, SignUp, Make-Transfer, Get-Recent-User ...) и многое другое.
Мои вызовы API singIn и signUp прекрасно работают с заголовком auth, в то время как все остальные вызовы API завершаются с ошибкой с заголовком auth (JSON Ошибка разбора: неожиданный идентификатор «Not» при получении {конечная точка}) и успешно завершается без заголовка аутентификации. на данный момент, я думаю, что проблема исходит от сервера. возможно из функции промежуточного программного обеспечения JWT. Вот код, с которым я работаю, чтобы лучше понять.
userActions. js
import { AsyncStorage } from 'react-native';
import { IS_USER, ADD_ERROR } from '../constants';
import fetchRequest from '../api/apiFetch';
export const isUserAction = phoneNumber => async dispatch => {
const userData = await AsyncStorage.getItem('userData');
const userToken = JSON.parse(userData);
const { token } = userToken.token;
const user = await fetchRequest(`/isUser/${phoneNumber}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: `Bearer ${token}`
}
});
if (user) {
dispatch(checkUser(user));
} else {
dispatch(addError(user));
}
};
const checkUser = userData => ({
type: IS_USER,
payload: userData
});
const addError = error => ({
type: ADD_ERROR,
payload: 'something went wrong'
});
apiFetch. js
const fetchRequest = async (url, options) => {
try {
const req = await fetch(`${BASE_URL}${url}`, options);
const res = req.status <= 404 ? req : Promise.reject(req);
return await res.json();
} catch (e) {
// eslint-disable-next-line no-console
console.log(`${e.message} while fetching ${url}`);
}
};
export default fetchRequest;
server. js
const koa = require('koa');
const app = new koa();
const cors = require('@koa/cors');
const bodyParser = require('koa-bodyparser');
const config = require('./config/config');
const router = require('./router');
const models = require('./models/db');
const jwt = require('./middleware/jwt');
app
.use(cors())
.use(bodyParser())
.use(jwt)
.use(router.routes());
(async function () {
try {
await models.sequelize.sync();
app.listen(config.PORT, () => {
console.log(`server running on ? ${config.PORT}`);
});
} catch (error) {
console.log('unable to connect to the database', error);
}
})();
JWT. js
const jwt = require('jsonwebtoken');
const models = require('../models/db');
module.exports = async (ctx, next) => {
const authorization = ctx.request.headers.authorization;
const url = ctx.url.split('/')[1];
if (!authorization && url !== 'signUp') {
ctx.body = {
message: 'no auth provided'
};
ctx.status = 401;
}
if (authorization) {
const tokenHead = authorization.split(' ');
if (tokenHead[0] !== 'Bearer') {
return await next();
} else {
const token = authorization.replace('Bearer ', '');
jwt.verify(token, process.env.JWT_SECRET, async (err, payload) => {
if (err) {
ctx.status = 401;
ctx.body = {
message: 'Failed to authenticate token'
};
}
const { userId } = payload;
const user = await models.User.findOne({ where: { id: userId } });
ctx.user = user;
next();
});
}
} else await next();
};
userController. js
const models = require('../models/db');
exports.isUser = async ctx => {
try {
const phoneNumber = Number(ctx.params.phoneNumber);
const user = await models.User.findOne({
where: {
phoneNumber: phoneNumber
}
});
if (user) {
console.log('reached here');
ctx.body = {
data: {
id: user.dataValues.id,
phoneNumber: user.dataValues.phoneNumber
},
isUser: true
};
console.log("TCL: ctx.body", ctx.body)
ctx.status = 200;
} else {
ctx.body = {
message: 'user not found',
isUser: false
};
console.log("TCL: ctx.body", ctx.body)
ctx.status = 204;
}
} catch (error) {
ctx.body = {
status: 'unsuccessful',
message: 'something went wrong',
error: error
};
ctx.status = 406;
}
};
просьба помочь и заранее поблагодарить.