2015-12-01 7 views
5

APIをLaravel、Dingo、JWTトークンで駆動しています。 PAWでのAPI呼び出しのテストは完全に機能します。ミドルウェアなしでjQueryを使用してAPI呼び出しを実行するJWTトークンは正常に動作しません。しかし、私がJWTトークンでAjaxリクエストを実行しようとするとすぐに、Imは401を取得しています。jQuery Ajaxを使用したJWTトークン

私はAjaxリクエストのトリックがありません。あなたはこのコードの問題を見ることができますか?

$.ajax({ 
    url: "http://api.domain.app/products", 
    dataType : 'jsonp', 
    type: 'GET', 
    beforeSend : function(xhr) { 
     xhr.setRequestHeader("Accept", "application/json"); 
     xhr.setRequestHeader("Content-Type", "application/json"); 
     xhr.setRequestHeader("Authorization", "Bearer XXXX"); 
    }, 
    error : function() { 
     // error handler 
    }, 
    success: function(data) { 
     console.log(data); 
     return data; 
    } 
}); 

クロスドメインのためにjsonpを使用する必要があります。しかし、これもまた、JWTミドルウェアをチューリングして正常に動作しています。

は、私はサブドメインとその作業罰金からAPIを削除しますが...

答えて

1

に助言することができます願っています。 jsonpとJWTトークンとは何か関係があります。

+0

あなたのコードは正しいです。おそらくCORSリクエストに問題がありました。 –

+0

jwtをウィンドウのローカル/セッション記憶域に保存していますか?それはサブドメインでは機能しないからです。 – Volt

1

HTTPステータスコード401は、「認証されていない」という意味であり、認証が必要であり、失敗しているか、または適切に提供されていないことを示します。 この場合、正しく提供されていないためです。 beforeSendパラメーターで指定しようとしています。 beforeSendは送信前にXMLHttpRequestを操作する機会を提供しますが、問題はJSONPを使用していることです。そしてJSONPはJSONPが<script>タグ挿入トリックなので、XMLHttpRequestを使用しないので、それを操作するのは無意味です。

Hereは、JSONPの正確な説明です。

あなたの質問は、「このコードの問題は見えますか?」です。 おそらくお聞きになるのは、「jQueryを使用するには、どのように認可問題を解決するのですか?」です。 「クロスドメインのためにjsonpを使用する必要があります」と言いますが、「クロスドメインに起因する」ということについてさらに詳しく説明すると、解決策につながる回答がより簡単に生成されます。 The answer in this issueは問題を解決する可能性がありますが、詳細な情報なしでは分かりにくいです。