2012-05-03 2 views
1

私はDjangoアプリケーションをリモートサーバーに配置しましたが、Tastypieはリモートサーバー上のログインユーザーを認識しません。TastypieはログインユーザーをAnonymousUserとして認識します

私は現在ログインしているユーザーに属するすべてのオブジェクトをフィルタリングtastypieリソースを持っている:

def apply_authorization_limits(self, request, object_list): 
    return object_list.filter(user=request.user) 

私はオブジェクトのためのエンドポイントでGETリクエストをしようとすると、私は次のエラーを取得します:

int() argument must be a string or a number, not 'AnonymousUser 

ログインが正しく行われなかったので推測していますか?

そうでしたか?

{% if user.is_authenticated %} 
    Logged in as <strong>{{ user.username }}</strong> 
    <a href="https://stackoverflow.com/users/logout">Logout</a> 
{% else %} 
    <a href="https://stackoverflow.com/users/signup">Signup</a> 
    <a href="https://stackoverflow.com/users/login">Login</a> 
{% endif %} 

は、コードが正しく(ユーザーが認証されていることを意味する)ユーザーのユーザー名が表示されます。テンプレートページで、私は次のコードを持っています。何が起こっているのでしょうか?ローカルサーバーでは、tastypie APIへのすべてのHTTPリクエストを正常に実行できますが、AnonymousUserとしては知られていませんが、リモートサーバーではAnonymousUser to Tastypieとして知られています

編集: 任意のビューでrequest.userを出力するprintステートメントを持っていれば、正しいログインユーザを取得できます。私がTastypieのapi.pyにrequest.userを出力するprintステートメントがあると、AnonymousUserとして知られています。私はAnastUser to Tastypieとして知られていましたが、アプリケーションの残りの部分には知られませんでしたか?

編集:私は次の認証を使用しています :

authentication = Authentication() 

私はApiKeyAuthenticationに認証を変更した場合は、その後、私は、リソースへの各GET/POSTリクエスト上のユーザ名とAPIキーを掲示しなければなりません。これを行う際の問題は、ユーザー名とビューを照会し、TastypieエンドポイントにGET/POSTを実行した新しい中間ビューを作成する必要があることです。これには別の解決策がありますか? 2番目の方法は、usernameとapikeyをwebappに埋め込み、JSを取得してそれらの値をGET/POSTクエリ文字列に追加することですが、セキュリティ上の問題が発生する可能性があります。ユーザー名とapiキーがあれば、別のユーザーのふりをする可能性があるため、セキュリティ上の問題になります。

+0

どのように 'tastypie 'にリクエストしますか?それはAJAXなのでしょうか?いつログインを要求しているのか、匿名はいつですか?それらはまったく同じドメインにありますか? – ilvar

+0

私はAJAXを通してそれらを作る。ユーザーがログインしている場合、またはユーザーが匿名である場合、URLは同じです。 Tastypieは、ユーザーがログインしている、またはログインしていないケースを処理します。要求は同じドメインから作成されます。 – egidra

+0

私は、sessionidのsookieがサーバーに到達するのを防ぐ何かがあると確信しています。 Firebug(またはWebインスペクタ)でのリクエストを見てください。セッションIDクッキーが含まれていますか? – ilvar

答えて

1

最初:APIKeyAuth:他のユーザーが安全でない接続でユーザー名とパスワード、またはセッションIDを取得した場合と同じくらい問題になります。

第二:あなたは(現在のログインユーザーのために、それは唯一、ブラウザで動作します)セッションベースの認証を使用する場合は、http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html#implementing-your-own-authentication-authorization

でドキュメントに詳述され、独自の認証バックエンドを作成する必要がありますそこから少し上にスクロールし、あなたが選択した認証方法についての厄介な警告を読んでください。

+0

セッションに基づく認証はどのように展開しますか?私は、セッションが現在ログインしているユーザーに関する情報を自動的には含んでいないと思っていますか?それとも、私のカスタム認証からrequest.userにアクセスする必要があるということです。しかし、私はカスタム認証バックエンドからrequest.userにアクセスしようとするとAnonymousUserを返すので、私はそれを行うことができません。 – egidra

+0

Nevermind、Javascriptタグ内にユーザー名とAPIキーを追加したので、残りのページにアクセスできました。 – egidra

関連する問題