2017-10-19 1 views
0

Ionic 3/Angular 4.3을 사용하여 기존 웹 응용 프로그램의 모바일 클라이언트를 구축하려고합니다.Ionic 3의 쿠키가 withCredentials를 사용하여 기기에서 전송되지 않음 : true

우리는 세션과 CSRF 보호를 위해 쿠키를 사용하고 있습니다.

import { Injectable } from '@angular/core'; 
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http'; 
import { Observable } from "rxjs"; 
import { CookieService } from 'ngx-cookie'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class AuthInterceptor implements HttpInterceptor { 

    constructor(private cookies: CookieService) {} 

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 
    var authReq = this.cookies.get('XSRF-TOKEN') ? request.clone({ 
     withCredentials: true, 
     headers: request.headers.set('X-XSRF-TOKEN', this.cookies.get('XSRF-TOKEN')) 
    }) : request.clone({ withCredentials: true }); 
    return next.handle(authReq); 
    } 
} 

테스트를 브라우저가 좋은만큼 내가 ionic serve address=localhost (CORS를 우회하기 위해 필요한 주소 플래그) 실행으로 작동에서 : 나는 부착 및 HTTP 요청 토큰 쿠키를 전송하기 위해 다음 HttpInterceptor을 구현했습니다.

그러나 ionic cordova run android을 사용하는 Android 기기에서 테스트 할 때 쿠키가 전송되거나 유지되지 않는 것으로 보입니다.

위에서 볼 수 있듯이 withCredentials에서 true까지 비슷한 게시물에 대한 대부분의 답변을 제안합니다.

+0

사용자 지정 요청 헤더가 올바르게 요구하는 비행 전 요청을 서버 측 구성 요소가 처리합니까? – CBroe

+0

@CBroe 프로덕션 서버가 아닌 dev 서버의 모든 출처를 허용했습니다. (필자는 장치가 원본'''file'''을 사용하여 액세스 할 때 필연적이라고 읽었습니다) – Jaysbays

+0

https : // stackoverflow .com/a/13997235/1427878 – CBroe

답변

0

쿠키는 모바일 장치에서 인증을 처리하는 좋은 방법이 아닙니다. 쿠키 저장소가 여러 개 있습니다 (webview에는 하나가 있고 기본 쿠키가 있으며 일부 HTTP 모듈에도 하나가 있다고 생각합니다). 그래서 그들은 신뢰할 수있는 작업을 위해 동기화되어야합니다. 안드로이드는 그것을위한 유틸리티로서 자신의 CookieSyncManager을 가지고있었습니다. (더 새로운 웹뷰는 그 자체로 명백하게 가능합니다). 또한 기기의 메모리가 부족한 경우 쿠키가 맨 앞줄에있어 운영 체제에서 지워집니다. 결과적으로 쿠키가 손실 될 수 있으며 사용자는 다시 로그인해야하므로 화가납니다.

그럼 대신 무엇을해야합니까? 토큰 기반 인증 시스템을 구현해야합니다. 토큰을 저장하려면 native-storage 또는 일부 sql-lite 저장소를 사용하십시오.

+0

나는이 정보를 고맙게 여긴다. 그러나 나는 묻는 질문에 답하지 않는다. 인증 코드의 재 작성은 현재 옵션이 아니며 HttpOnly 플래그가 설정되어 있으므로 JS의 토큰 쿠키에 액세스 할 수 없습니다. – Jaysbays

+0

질문에 아주 잘 대답 할 수 있습니다. 당신은 쿠키가 휴대 기기에서 매우 휘발성이라는 사실 때문에 "... _ 쿠키가 발송되지 않거나 ** 지속됩니다 ** _ ..."라고 썼습니다. – David

관련 문제