2016-09-01 13 views
1

何らかの理由で、私のYii2 REST API認証がもう機能しません。Yii2の基本的なREST API認証エラー

function getJSON($template_url) { 
    $authorization = "Authorization: Bearer " . get_option("auth_key"); 

    // Create curl resource 
    $ch = curl_init(); 
    // Set URL 
    curl_setopt($ch, CURLOPT_URL, $template_url); 
    // Return transfer as a string 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    // Set headers 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', $authorization)); 
    // $output contains output as a string 
    $output = curl_exec($ch); 
    // Close curl resource 
    curl_close($ch); 

    return json_decode($output, true); 
} 

これは私に次のような応答を提供します:私は私のAPIからの応答を取得するための機能を書いている

アレイ([名] =>不正な[メッセージ] =>無効な資格情報を要求している[コード] => 0 [ステータス] => 401 [タイプ] =>のYii \ウェブ\のUnauthorizedHttpException)

を、私は私のコントローラでこれを持っている:

public function behaviors(){ 
    return [ 
     'contentNegotiator' => [ 
      'class' => ContentNegotiator::className(), 
      'formats' => [ 
       'application/json' => Response::FORMAT_JSON, 
      ], 
     ], 

     'authenticator' => [ 
      'class' => CompositeAuth::className(), 
      'except' => ['activate'], 
      'authMethods' => [ 
       HttpBearerAuth::className(), 
      ], 
     ] 

    ]; 
} 

そして、これは、UserクラスにfindIdentityByAccessTokenです:

public static function findIdentityByAccessToken($token, $type = null) { 
    $query = (new Query()) 
     ->select([ 
      'kl.access_token           access_token', 
     ]) 
     ->from('klanten kl') 
     ->where(['kl.access_token' => $token]) 
     ->one(); 
    return $query; 
} 

データベーステーブルに列access_tokenはを持っています。私は、getJSON関数で使用するアクセストークンがデータベースで使用可能かどうかを確認しました。だから私は何が間違っているのか分からない。

答えて

0

これは、異なるApacheシステム上のリクエストヘッダーの問題でもあります。場合によっては、承認ヘッダーが失われることがあります。あなたのhtaccessファイルに以下のコードを追加します。

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

Missing Authorization Header discussion on GitHub

+0

私は私のWordPressのプラグインでこのコードを使用していますので、私はhtaccessファイルを変更することはできません。またはAuthorizaitonヘッダーがAPIで失われることはありますか? –

+0

これは、あなたが「何らかの理由で私のYii2 REST API認証がもう働かない」と言ったときにこれが問題になると仮定していただけです - これは私には既に働いていて、速く走っている別のサーバー/ cgiモードでは、認証ヘッダーが失われます。 – nadar

+0

それは前に本当にうまくいった。私は、変更されたのはデータベース接続だけだと思います。しかし、データベースはまったく同じですので、問題があるかどうかわかりません。 –

関連する問題