0

私はサーバーアプリケーションにcodeigniter REST APIを使用しています。そしてAngular2のクライアントは、私のREST APIに基本認証を与えました。 、私は、角2 Requestヘッダーフィールド許可は、プリフライト応答でAccess-Control-Allow-Headersで許可されていません。

$config['rest_auth'] = 'basic'; 

そして

$config['rest_valid_logins'] = ['uname' => 'pwd']; 

もCORSが、私はコードの下に使用しているチェックのためのよう

$config['check_cors'] = TRUE; 
$config['allowed_cors_headers'] = [ 
    'Origin', 
    'X-Requested-With', 
    'Content-Type', 
    'Accept', 
    'Access-Control-Request-Method' 
]; 
$config['allowed_cors_methods'] = [ 
    'GET', 
    'POST', 
    'OPTIONS', 
    'PUT', 
    'PATCH', 
    'DELETE' 
]; 
$config['allow_any_cors_domain'] = TRUE; 

を設定しているし、また、私は明示的に私の残りのコントローラでと試みた試してみました

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); 
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description'); 

コード:

私は郵便配達員と確認しても何の問題もなくうまくいきます。角度誤差とのチェックは、のようになると

XMLHttpRequest cannot load http://localhost:97/sencogold/index.php/Adminaccount_api/login_adminuser. Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response. 

場合、私はfalse残りauthおよび

$config['rest_auth'] = FALSE; 

APIのユーザー名とパスワードを確認することはせずにうまく機能しているAuthorizationヘッダを削除し、

角度で
this.headers = new Headers(); 
    //this.headers.append('Authorization', 'Basic ' + btoa('lmxretail:[email protected]')); 
    this.headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

私のAPIに認証を適用するのを手伝ってください。

+0

チェック。ヘッダーは許可されるかどうか。 –

+0

この問題を解決するためにChromeに「Access-Control-Allow-origin」プラグインを追加しますが、永続的な解決策ではありません。 –

+0

[ドメイン間リクエスト(Angular 2)を作成するにはどうすればいいですか?](https://stackoverflow.com/questions/34790051/how-to-create-cross-domain-request-angular-2) – echonax

答えて

1

プリフライトリクエストが成功するためには、サーバーコントローラは「Authorization」ヘッダーを有効とする必要があります。

Access-Control-Allow-Headers: Authorization, Content-Type, Content-Range, Content-Disposition, Content-Description

+0

私は持っていますこれと同じように試しましたが、まだ同じ問題です。 this.headers.append( 'アクセス制御許可ヘッダー'、 '許可、コンテンツタイプ、コンテンツ範囲、コンテンツ - 処理、コンテンツ - 説明'); this.headers.append( 'アクセス制御許可のメソッド'、 'GET、POST、OPTIONS'); this.headers.append( 'Access-Control-Allow-Origin'、 '*'); –

+0

これは正しい場所でやっていますか?私はあなたがサーバーの設定でこれを行う必要があることを意味します。あなたのコードは、あなたがクライアント要求でそれをやっているように見えます。 – YuVi

+0

私は残りのコントローラのヘッダー(「アクセス制御許可ヘッダー:承認、コンテンツタイプ、コンテンツ範囲、コンテンツ処理、コンテンツ記述」)を追加しました。 header( 'コンテンツタイプ:application/json'); ヘッダー( "Access-Control-Allow-Origin:*"); ヘッダー( "アクセス制御許可メソッド:GET"); ヘッダー( "アクセス制御許可メソッド:GET、OPTIONS"); –

3

はCORSにAuthorizationが確認追加:あなたは他の許可のヘッダ値とともに「承認」キーを追加することによってそれを行うことができ、サーバー構成で

$config['allowed_cors_headers'] = [ 
    'Authorization', 
    'Origin', 
    'X-Requested-With', 
    'Content-Type', 
    'Accept', 
    'Access-Control-Request-Method' 
]; 
+0

ありがとう、助けてくれました。私がallowed_cors_headersでAuthorizationを追加した後でうまくいきます –

関連する問題

 関連する問題