1

次のような Json オブジェクトを POST を使用して送信できる API /user/auth を作成しました。

var user = {"username":"alex", "password":"m"}
$http(
            {
                method: 'POST',
                url: '/api/v1/user/auth',
                data: user,
            }
        ).
            success(function(data, status, headers, config) {
                console.log(data)
            }).
            error(function(data, status, headers, config) {
                // called asynchronously if an error occurs
                // or server returns response with an error status.
            });

Django からの応答は次のとおりです。

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Content-Type,*
Access-Control-Allow-Methods:POST,GET,OPTIONS,PUT,DELETE
Access-Control-Allow-Origin:*
Content-Language:fr
Content-Type:application/json
Date:Fri, 30 Aug 2013 15:22:01 GMT
Server:WSGIServer/0.1 Python/2.7.5
Set-Cookie:sessionid=w63m0aoo8m3vfmvv0vk5d6w1708ftsrk; Path=/
Vary:Accept, Accept-Language, Cookie

したがって、Django は適切な Cookie を返しますが、理由はわかりません。Chrome はこの Cookie を Resource に設定しません。

リクエストは 127.0.0.1:8000 から 127.0.0.1:8080 に送信されます。このミドルウェアを使用して CROS リクエストを処理し、次の設定も行います。

SESSION_COOKIE_HTTPONLY = False
4

2 に答える 2

0

問題のある行は次のとおりです。

 Access-Control-Allow-Origin: *

クレデンシャル リクエストは、ワイルドカード許可オリジンでは機能しません。次のように、名前を具体的に設定する必要があります。

Access-Control-Allow-Origin: http://127.0.0.1:8080

詳細については、次を参照してください。

https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials

于 2013-08-31T06:11:09.573 に答える
0

MozillaへのBqmリンクのおかげで、Cookieが設定されていない理由がようやくわかりました。

実際、送信したヘッダーを設定する必要があります。

Access-Control-Allow-Credentials: true

Angular では、これは次の方法で行われます。

$http(
            {
                method: 'POST',
                url: '/api/v1/user/auth',
                data: user,
                withCredentials: true
            }
        )

バックエンドが setCookie で応答すると、ブラウザはブラウザに Cookie を設定できるようになります。

于 2013-08-31T11:15:27.887 に答える