Я пытаюсь найти простой способ передать один из трех видов токенов (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), потому что есть разныеметоды декодирования токенов.