2017-11-17 2 views
0

이것은 인증 순서 질문입니다. 나는 현재 나의 메인 웹 사이트와 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을 생성 할 때이를 알릴 수 있습니까? 새로운 위치 대신?

감사합니다.

답변

0

express에서는 serve-static을 사용하여 /* 경로보다 우선하는 정적 파일을 제공 할 수 있습니다. 자세한 내용은 https://expressjs.com/en/starter/static-files.html을 참조하십시오.

참고 : 정적 애셋은 인증을 필요로하지 않는다고 가정합니다 (일반적으로 그렇지 않습니다).

app.use(express.static('public')) 

주 : 이것은 precendence을 적용하려면 /* 경로를 선언 블록 이상이어야한다.

script.js 파일이 /public 폴더에있는 경우 해당 파일은 Express 서버의 루트에서 제공됩니다.

+0

정적 자산은 나를 인증하지 않아도됩니다. 그 통찰력을 정말로 고맙게 생각합니다. 정적 전달을 완전히 잊었습니다. 그러나 기본 Angular 2 파일은 항상 루트에서로드됩니다. 어떻게 든 이걸 바꿀 수 있을까? 아니면 돌로 세울 수 있니? – ytpillai

+0

"항상 루트에서로드"라는 의미는 무엇입니까? Angular에 익숙하지 않습니다. –

+0

Angular가 TypeScript를 javascript 파일로 컴파일 할 때 index.html에 스크립트 태그를 자동으로 추가하고 "/ assets /"대신 "/"에서 파일을로드합니다. 나는 그것을 바꾸려고했다. – ytpillai

관련 문제