okey, давайте сначала поймем процесс аутентификации jwt. Прежде всего, секретный ключ генерируется в бэкэнде, как только пользователь впервые входит в систему, бэкэнд-сервер проверяет, существует ли пользователь, и в ответ на запрос входа в систему сервер.кодировать токен с помощью секретного слова и уникальной информации, связанной с пользователем, обычно это идентификатор пользователя и время проверки, когда срок действия токена истечет
const payload = {
sub: user.id,
exp: moment().add(EXPIRATION_DAYS_NUMBER, CONSTANTS.TIME_UNITY).unix()
}
let token = jwt.encode(payload, CONSTANTS.JWT_SECRET)
после кодирования токена сервер отправляет его в ответезапроса на вход в систему клиентская сторона захватывает этот токен и сохраняет его в локальном хранилище. Теперь клиент должен использовать токен для любой будущей связи с сервером, требующей аутентификации при каждом вызове http, для которого требуется аутентификация, мы отправляем токен в заголовок, чтобы серверпроверит заголовок в промежуточном программном обеспечении и декодирует токен с тем же JWT_SECRT, чтобы узнать, является ли он действительным токеном или нет
middelware(req,res,next)
let token = req.headers.authorization
let payload = jwt.decode(token, CONSTANTS.JWT_SECRET)
user.findOne({ id: payload.sub }).exec((err, user) => {
if (err) return res.forbidden('not authorized')
next()
})
, а на стороне клиента мы можем использовать угловой перехватчик для установки токена вАЭМдер для всей связи с сервером
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor( {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
Authorization: `Bearer localstorage.getItem(token)}`
}
});
return next.handle(request);
}
}
и внедрения Перехватчика в качестве провайдера в app.module