12

残りの API のブラウザー モードから現在のユーザーをログアウトできません。

これが私の設定です

REST_FRAMEWORK = {
               'PAGINATE_BY': 10,  
                 'DEFAULT_AUTHENTICATION_CLASSES': (  
                      'rest_framework.authentication.BasicAuthentication',  
                      'rest_framework.authentication.SessionAuthentication',  
                      'rest_framework.authentication.TokenAuthentication',  
                                                 ),  
                  'DEFAULT_PERMISSION_CLASSES': (  
                      'rest_framework.permissions.IsAuthenticated',  
                                      ),  
                 }

セッションを使用したからですか?助けてください。

リクエスト ヘッダーとレスポンス ヘッダー:

Request URL:`http://localhost:8000/api/api-auth/logout/?next=/api/city/`   
Request Method:GET  
Status Code:302 FOUND  
Request Headers:
---------------
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  
Accept-Encoding:gzip,deflate,sdch  
Accept-Language:en-US,en;q=0.8  
Connection:keep-alive  
Cookie:sessionid=j7qebcdjdwzwqlmep4eyq3svuial43uv; csrftoken=vK3Ghn3QFVbCe3nKx1LDZBTzM7sRiDym  
Host:127.0.0.1:8000  
Referer:`http://localhost:8000/api/city/`
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)   Chrome/28.0.1500.71 Safari/537.36  
Query String Parametersview sourceview URL encoded  
next:/api/city/  
Response Headers  
----------------
Content-Type:text/html; charset=utf-8  
Date:Mon, 15 Jul 2013 20:46:35 GMT  
Location:`http://localhost:8000/api/city/`  
Server:WSGIServer/0.1 Python/2.7.4  
Set-Cookie:sessionid=b1x24z93dqu384lqirtv5r9npy16s0qx; expires=Mon, 29-Jul-2013 20:46:35 GMT;  httponly; Max-Age=1209600; Path=/
Vary:Cookie  
4

3 に答える 3

19

解決しました!これは、BasicAuthentication が有効になっているためです。ブラウザでHTTPログインを介してログインしたと思いますが、ログアウトが機能していないようです.BasicAuthenticationを削除したところ、すべてが正常に機能するようになりました。

于 2013-07-16T01:27:45.157 に答える
4

実際にはログアウトは機能していますが、ログアウトの最後に (権限 IsAuthenticated を使用するため、認証が必要なビューへの) リダイレクト中に、BasicAuth はキャッシュされた HTTP 認証ヘッダー情報を使用してリクエストを再度認証します。

auth = request.META.get('HTTP_AUTHORIZATION', b'')

OPが言ったように、BasicAuthを無効にしてSessionAuthのみを使用できます。しかし問題は、GUI なしで API にアクセスする必要がある場合があり、代わりに TokenAuth を使用できることです。いずれにせよ、BasicAuth/TokenAuth はそれほど安全ではないため ( https://www.rfc-editor.org/rfc/rfc2617 )、OAuth2 またはその他のより安全な認証スキームを使用する方がよい場合があります。とにかく需要次第です。

于 2014-03-13T05:21:05.393 に答える
4

今日この問題に遭遇し、順序を次のように変更して解決しました。

'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework.authentication.TokenAuthentication',
),
于 2016-09-27T06:19:31.770 に答える