1

現在取り組んでいるプロジェクトでは、カスタム認証モデルを作成することにしました。rest-framework と all-access の両方を使用しています。ローカル認証はまだ実装されていません (実装されていますが、バージョンが異なるため、問題はありません)。

User モデルが正しく登録され、OAuth 認証が機能します。ユーザーは問題なくログに記録されます。

ビューを操作する場合、django のビューを基本クラスとして使用すると、認証が適切に機能します。rest-framework の APIView を使えばそれほどでもありません。

私の ProfileView (LOGIN_REDIRECT_URL はここにリダイレクトされます) で、rest_framework.request.Request インスタンスを受け取りましたが、これで問題ありません。問題は:

request.user は AnonymousUser のインスタンスです (ログイン後も)

問題は私の実装にあると思いますが、次のようになります。

request._request.user は認証済みユーザーです

( request._request は元の django リクエストであることに注意してください)

これは残りのフレームワークのバグだと思う傾向がありますが、回避策を知っている人はいますか?

編集 ログインは APIView 以外のクラスで行われることに注意してください。代わりに、View を継承するクラスで行われます。これがおそらく、 User インスタンスが APIView インスタンスに渡されない理由です。

4

1 に答える 1

4

でを設定する必要がありDEFAULT_AUTHENTICATION_CLASSESますsettings.py。それ以外の場合、DRF はNoneasrequest.authおよびAnonymousUserasにデフォルト設定されますrequest.user

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

それを設定してユーザーがログインしたらsession_id、リクエストヘッダーで が利用可能であることを確認してください。通常、ブラウザはセッション情報を保存し、すべてのリクエストのヘッダーに渡します。

ブラウザー以外のクライアント (モバイル アプリなど) を使用している場合は、ヘッダーにセッション ID を手動で設定する必要があります。

またoauth、ユーザーのサインインに使用すると述べoauth2たので、セッション ID の代わりに oauth2 認証ヘッダーを指定する必要があるためです。

"Authorization: Bearer <your-access-token>" 

Django Rest フレームワークでの認証を参照してください

于 2013-04-28T05:26:32.740 に答える