Angular HttpInterceptor - Как ссылаться на токены (строка var) перед отправкой на сторону сервера? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь найти простой способ передать один из трех видов токенов (JWT, Facebook SDK и Google SDK) с AuthInterceptor на свой внутренний сервер.Когда пользователь проходит аутентификацию, токен сохраняется в localStorage: это может быть токен JWT, токен FB или Google Token.

Здесь AuthInterceptor:

@Injectable()
export class AuthInterceptor implements HttpInterceptor {

    constructor(private authService: AuthService) { }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const token = localStorage.getItem('token') || null;
        const tokenFB = 'FB ' + localStorage.getItem('tokenFB') || null;
        const tokenG = 'G ' + localStorage.getItem('tokenG') || null;
        if (token || tokenFB || tokenG) {
            const authToken = req.clone({
                headers: req.headers.set('Authorization', 'Bearer' + (token ? token : '') + (tokenFB ? tokenFB : '') +
                (tokenG ? tokenG : ''))
            });
            return next.handle(authToken);
        } else {
            return next.handle(req);
        }
    }

}

Первоначально он работал нормально только с localStorage token, но сейчас я пытаюсь передать различные типы токенов, и токену нужно что-то, чтобы ссылаться на них на стороне сервера(например, FB и G после BEARER).

Вот мой класс Node.js auth.js, который ловит токен из запроса:

// auth.js
const jwt = require('jsonwebtoken');

module.exports = async(req, res, next) => {
    try {
        console.log(req.headers.authorization);
        // this works for JWT
        const token = req.headers.authorization.split(' ')[1];
        // need to know token type: JWT, Facebook (FB) or Google (G)
        // const tokenFB = ?
        // const tokenG = ?
        // JWT Token
        const decodedToken = await jwt.verify(token, process.env.JWT_Key);
        // FB and Google Methods to decode
        next();
    } catch (error) {
        res.status(401).send('Auth Failed.');
    }
};

Я восстанавливаю значение token для auth.js, но мне нужно знать тип токена (JWT Token, Facebook или Google Token), потому что есть разныеметоды декодирования токенов.

...