2017-10-19 8 views
0

Ionic 3/Angular 4.3を使用して既存のWebアプリケーション用のモバイルクライアントを構築しようとしています。Ionic 3のCookieがwithCredentialsを使用してデバイスに送信されない:true

セッションやCSRFの保護にCookieを使用しています。私は、HTTPリクエストでトークンクッキーを添付して送信するために、次のHttpInterceptorを実装している:

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を回避するために必要なアドレスフラグ)を実行すると正常に動作します。

ただし、ionic cordova run androidを使用してAndroid搭載端末からテストした場合、Cookieは送信されず、永続化されていないようです。

上記からわかるように、私はwithCredentialstrueに設定しました。

+0

カスタムリクエストヘッダーが正しく必要とするフライト前リクエストを処理するサーバー側コンポーネントですか? – CBroe

+0

@CBroe私は、プロダクションサーバではなく、devサーバ上のすべての起源を許可しています(これは、 '' ''ファイル '' 'を持つデバイスがアクセスする際には必要ではないことを読んでいます) – Jaysbays

+0

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

答えて

0

モバイルデバイスで認証を処理するには、Cookieを使用しないでください。複数のクッキーストアがあります(webviewには1つあり、ネイティブのものがあり、HTTPモジュールでも1つあります)ので、信頼できる状態で同期する必要があります。 Androidはそれのためのユーティリティとして独自のCookieSyncManagerを持っていました(新しいWebviewsはそれ自身でそれに明らかにできる)。また、デバイスのメモリが不足している場合、クッキーは最前面に表示され、オペレーティングシステムによって消去されます。その結果、あなたのクッキーは毎回失われてしまい、ユーザーは再度ログインする必要があるので動揺します。

代わりに何をする必要がありますか?トークンベースの認証システムを実装する必要があります。トークンを格納するには、native-storageまたは一部のsql-liteストレージを使用します。

+0

私は情報に感謝しますが、これは私が尋ねた質問に答えるものではありません。認証コードの書き換えは現時点ではオプションではなく、HttpOnlyフラグが設定されているのでJSのトークンCookieにアクセスできません。 – Jaysbays

+0

これはあなたの質問にとてもうまく答えるかもしれません。あなたは「... _クッキーは送信されていないか、または**持続されています** _ ...」と書いています。これは、クッキーがモバイルデバイス上で非常に揮発性があるという事実のためかもしれません。 – David

関連する問題