1

Django アプリをリモート サーバーにデプロイしましたが、tastypie はリモート サーバーにログインしているユーザーを認識しません。

現在ログインしているユーザーに属するすべてのオブジェクトをフィルタリングする 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="/users/logout">Logout</a>
{% else %}
  <a href="/users/signup">Signup</a>
  <a href="/users/login">Login</a>
{% endif %}

また、コードはユーザーのユーザー名を正しく表示します (これは、ユーザーが認証されたことを意味します)。何が起こっている可能性がありますか?ローカル サーバーでは、tastypie API へのすべての HTTP 要求を正常に実行できます。私は AnonymousUser としては知られていませんが、リモート サーバーでは Tastypie に対して AnonymousUser として知られています。

編集:任意のビューで request.user を出力する print ステートメントがあると、正しいログイン ユーザーが取得されます。Tastypie api.py に request.user を出力する print ステートメントがある場合、私は AnonymousUser と呼ばれます。Tastypie では AnonymousUser として認識されているのに、アプリケーションの他の部分では認識されていないのはなぜですか?

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

authentication = Authentication()

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

4

1 に答える 1

1

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

2番目:セッションベースの認証を使用する場合(現在ログインしているユーザーの場合、ブラウザーでのみ機能します)独自の認証バックエンドを作成する必要があります。詳細については、http://django-tastypie.readthedocsのドキュメントを参照してください。 .org / en / latest / authentication_authorization.html#implementing-your-own-authentication-authorization

そこから少し上にスクロールして、選択した認証方法に関する厄介な警告を読んでください。

于 2012-05-09T03:43:43.950 に答える