이것은 인증 순서 질문입니다. 나는 현재 나의 메인 웹 사이트와 API 포인트 모두에 대한 라우팅을 관리하는 익스프레스 백엔드로 호스팅되는 웹 사이트를 가지고있다. 내 경로의 경우 요청에 웹 사이트의 게시 된 OAuth 토큰이 있어야합니다.이 토큰은 특정 Gmail 계정에 해당합니다.Express 및 각도 2를 사용하여 순서를 인증하는 방법
저는이 토큰/해당 이메일을 확인하여 내 웹 사이트에 액세스 할 수있는 권한이 있습니다 (인증 기능이 완료되지 않았지만 문제가되지 않음).
function validateUser(token) {
return new Promise(
(resolve, reject) => {
if (!token)
reject("Empty token");
request(
'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' + token,
(error, response, body) => {
console.log(body);
if (error) {
return reject("Error");
} else if (JSON.parse(body)['error_description']) {
return reject(JSON.parse(body)['error_description']);
} else if (body) {
let theDict = JSON.parse(body);
theDict['oauth_token'] = token;
return resolve(theDict);
}
return reject("some other error");
}
);
}
);
}
그럼 나는 어떤 위치에 요청 얻을 관리하는 경로가 (다음 로그인 페이지로 리디렉션 및 사용자가 로그인 한 후 내용을 얻을 수있는 토큰 경로에 게시). 이제
router.post(
'/*',
(req, res, next) => {
var token = req.body['token'];
validateUser(token).then(
(data) => {
request(
'http://localhost:4200',
(err, remoteResponse, remoteBody) => {
if (err) {
return res.status(500).end('Error');
}
res.send(remoteBody);
}
);
},
(err) => {
res.redirect('/login');
}
);
}
);
, 내가 index.html 파일이 잘 작동로드 (다시 dev에 서버에 프록시 역) 내 사이트의 메인 페이지로 이동하지만, 분명히 같은 다른 모든를로드 할 때마다 여기에 문제가있다 "/ assets/js"또는 기본 Angular 2 파일은 유사하게 인증되지 않기 때문에 작동하지 않습니다.
Angular 2에서 동일한 인증 방법을 사용하여 이러한 요청을 보내는 방법이 있습니까? index.html이로드 된 후 oauth 토큰을 Angular 2 응용 프로그램에 저장 했으므로 어떻게 든 사용할 수 있습니까?
또는 Express에서 다른 API 경로를 설정하여 파일을로드 할 수도 있지만 Angular 2에서 vendor.html 또는 기타 파일을로드하기위한 추가 script 태그를 사용하여 index.html을 생성 할 때이를 알릴 수 있습니까? 새로운 위치 대신?
감사합니다.
정적 자산은 나를 인증하지 않아도됩니다. 그 통찰력을 정말로 고맙게 생각합니다. 정적 전달을 완전히 잊었습니다. 그러나 기본 Angular 2 파일은 항상 루트에서로드됩니다. 어떻게 든 이걸 바꿀 수 있을까? 아니면 돌로 세울 수 있니? – ytpillai
"항상 루트에서로드"라는 의미는 무엇입니까? Angular에 익숙하지 않습니다. –
Angular가 TypeScript를 javascript 파일로 컴파일 할 때 index.html에 스크립트 태그를 자동으로 추가하고 "/ assets /"대신 "/"에서 파일을로드합니다. 나는 그것을 바꾸려고했다. – ytpillai