私は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キーがあれば、別のユーザーのふりをする可能性があるため、セキュリティ上の問題になります。
どのように 'tastypie 'にリクエストしますか?それはAJAXなのでしょうか?いつログインを要求しているのか、匿名はいつですか?それらはまったく同じドメインにありますか? – ilvar
私はAJAXを通してそれらを作る。ユーザーがログインしている場合、またはユーザーが匿名である場合、URLは同じです。 Tastypieは、ユーザーがログインしている、またはログインしていないケースを処理します。要求は同じドメインから作成されます。 – egidra
私は、sessionidのsookieがサーバーに到達するのを防ぐ何かがあると確信しています。 Firebug(またはWebインスペクタ)でのリクエストを見てください。セッションIDクッキーが含まれていますか? – ilvar