$ window.open에 인증 헤더를 추가하는 방법
사용자가 데이터베이스에 저장된 데이터를 입력한 후 서버측에서 pdf 파일로 컴파일하는 angularjs 어플리케이션이 있습니다.모든 액세스에는 적절한 인증 헤더가 있어야 합니다.필요한 데이터를 채운 후 사용자가 버튼을 눌러 데이터를 저장한 다음 pdf 파일을 검색합니다.최적으로, 나는 전화합니다.$window.open(url_generating_pdf
angularjs 앱에서.잘 작동하여 다른 창에서 열리지만 인증 헤더를 추가하는 방법$window
요청?제가 알기로는 pdf를 다운받을 수 없고 ajax로 출력할 수 없기 때문에 이 인증을 놓쳤습니다.아니면 서버에서 url을 호출하여 다른 창에서 파일을 열 수 있는 다른 방법이 있을까요?
저는 이 오래된 질문을 정확하고 안전한 답변으로 업데이트해야 한다고 생각합니다.
window.open에서 수행하는 HTTP GET 요청에는 헤더를 추가할 수 없습니다.
인증 요청을 하는 안전한 방법은 인증 토큰을 요청 헤더에 설정하고, 이전 답변에서 제안했듯이 URL에 노출되지 않는 것입니다(그 이후로 몇 가지를 배웠습니다).
Angular를 사용하여 인증된 서버에서 PDF(또는 기타 이진 데이터)를 다운로드하려면 다음과 같이 하십시오.JS 당신은 다음을 수행해야 합니다.
- 헤더에 있는 인증 토큰을 전송하는 리소스에 HTTP GET 요청을 하고 responseType을 이진 데이터 형식(예: blob 또는 arraybuffer)으로 설정합니다.
- 브라우저에서 "다른 이름으로 저장" 대화상자를 사용하여 파일에 있는 이진 데이터를 다운로드합니다. 일반적으로 이진 데이터에 대한 다운로드 링크를 만든 후 클릭합니다.
이 답변이 이 질문에 대한 의구심을 해소하고 인증된 REST API에서 리소스를 안전하게 다운로드 할 수 있는 방법을 제공하기를 바랍니다.
이 인증 파라미터를 URL에 추가하고 서버 쪽에서 GET를 하면 될 것 같습니다.
//Add authentication headers as params
var params = {
access_token: 'An access_token',
other_header: 'other_header'
};
//Add authentication headers in URL
var url = [url_generating_pdf, $.param(params)].join('?');
//Open window
window.open(url);
헤더와 responseType의 토큰으로 보안된 api를 호출하여 다음과 같은 방법으로 응답을 blob하고 파싱할 수 있으며 브라우저에서 크롬과 파이어폭스에 대한 pdf를 볼 수 있기를 바랍니다.
var ieEDGE = navigator.userAgent.match(/Edge/g);
var ie = navigator.userAgent.match(/.NET/g); // IE 11+
var oldIE = navigator.userAgent.match(/MSIE/g);
var blob = new window.Blob([response], { type: 'application/pdf' });
if (ie || oldIE || ieEDGE) {
window.navigator.msSaveBlob(blob, fileName);
}
else {
var fileURL = URL.createObjectURL(blob);
window.open(fileURL);
}
언급URL : https://stackoverflow.com/questions/23138671/how-to-add-authentication-header-to-window-open
'programing' 카테고리의 다른 글
angularjs - 확장 재귀적 (0) | 2023.10.26 |
---|---|
stdout 및 stdin 파일 설명자를 닫은 후 다시 열기 (0) | 2023.10.26 |
선택 및 하드 코딩된 값을 포함한 SQL 삽입 (0) | 2023.10.26 |
자바스크립트 iframe 내용만 출력 (0) | 2023.10.26 |
SQL 보기에 기본 키 추가 (0) | 2023.10.21 |