Я использую Angular2 на стороне клиента и сервер-экспресс-узел в качестве моего бэкэнда.Узел-сервер работает как промежуточное программное обеспечение API, а также как моя служба аутентификации.Пользовательские запросы должны содержать действительный токен JWT для выполнения запросов на узле-сервере.
Все мои функции GET и другие функции PUT работают правильно.Я написал новый, который просто должен удалить идентификатор на стороннем API, не.
Более того, мой сервер нод-экспресс отправляет клиентским сообщениям об ошибках в некоторых точках.Это касается моей проблемы: всякий раз, когда я запускаю свою последнюю PUT-функцию, мой сервер отвечает «токен не предоставлен».Это происходит, когда пользователь не авторизован на стороне клиента.
Как я уже говорил, все остальные мои функции работают.this.createAuthenticationHeaders();
необходимо для выполнения правильного запроса на стороне сервера.Но это реализовано.
Другими словами, аутентификация теряется между клиентом и сервером, и я получаю свое собственное сообщение об ошибке: «Токен не предоставлен» .
Appointment-Detail.Component.ts
cancelAppointment() {
this.authService.getProfile().subscribe(profile => {
this.username = profile.user.username; // Set username
this.email = profile.user.email; // Set e-mail
if (profile.user.email) {
this.apiService.cancelUserAppointment(this.id).subscribe(data => {
console.log(this.id);
if (!data.success) {
this.messageClass = 'alert alert-danger'; // Set error bootstrap class
this.message = data.message; // Set error message
} else {
this.messageClass = 'alert alert-success'; // Set success bootstrap class
this.message = data.message; // Set success message
// After two seconds, navigate back to blog page
}
});
}
});
}
Служба API
cancelUserAppointment(id) {
this.createAuthenticationHeaders();
console.log('API SERVICE ' + id);
return this.http
.put(this.domain + 'api/appointments/' + id + '/cancel', this.options)
.map(res => res.json());
}
Функции службы API, которые работают
getCertificatesByUser(email) {
this.createAuthenticationHeaders();
return this.http
.get(this.domain + 'api/user/' + email + '/certificates', this.options)
.map(res => res.json());
}
Маршрут сервера к стороннему API
router.put('/appointments/:id/cancel', (req, res) => {
console.log('hi');
var id = req.params.id;
const url = process.env.acuityUri + '/appointments/' + id + '/cancel';
console.log(id);
});
Промежуточное ПО аутентификации
router.use((req, res, next) => {
const token = req.headers['authorization']; // Create token found in headers
// Check if token was found in headers
if (!token) {
res.json({
success: false,
message: 'No token provided'
}); // Return error
} else {
// Verify the token is valid
jwt.verify(token, config.secret, (err, decoded) => {
// Check if error is expired or invalid
if (err) {
res.json({
success: false,
message: 'Token invalid: ' + err
}); // Return error for token validation
} else {
req.decoded = decoded; // Create global variable to use in any request beyond
next(); // Exit middleware
}
});
}
});