web-dev-qa-db-ja.com

Django Rest Frameworkを使用してログインAPIを作成するにはどうすればよいですか?

Django restフレームワークを使用して、ログインAPIを作成します(または、既に事前にバンドルされている場合は既存のものを使用します)。しかし、私は完全に途方に暮れています。 Django RESTフレームワークの「ログイン」URLに投稿リクエストを送信するたびに、参照可能なAPIテンプレートページが返されます...

私の設定

urls.py

url(r'^api/v1/', include('rest_framework.urls', namespace='rest_framework'))

settings.py

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

私がしたいこと

要求:

POST /api/v1/login  username='name' pass='pass'

応答:

200 OK "{username: 'name', 'userId': '54321'}" set-cookie: sessionid="blahblah"
59
JayPrime2012

Django-rest-framework-jwt のAPIビューをご覧ください。これは、Cookieセッションではなく認証トークンを作成するための実装ですが、実装も同様です。 views.py および serializers.py を参照してください。おそらくserializers.pyを変更せずに使用し、適切なパラメーターを返すようにビューを調整し、セッションCookieを設定することができます(認証で既に実行されている場合は思い出せません)。

37
Kevin Stone

このようなものが必要な場合は、同じことを行いますが、トークン認証を使用します。

トークンページを確認してください こちら

これはあなたが望むものではないかもしれませんが、私はそれを行う方法です(モバイルクライアントの残りのAPIエンドポイントとして使用しているため)

Url localhost:8000/api/users/ -H Authorization : Tokenを実行できます。ブラウザは、提供されたRESTフレームワークurlで作成した通常のログインページを使用できます。

url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')

「ログインなし」ナビゲーション用のトークンを取得する

url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token')

次に、呼び出しなどを行う場合、認証トークンを渡すことができます。もちろん、これは私がそれを行う方法であり、おそらく最も効率的な方法ではありませんが、私の目標は、ユーザーにブラウザーのセッション認証とトークン経由のモバイルアクセスを提供できる方法を作成することでした。

次に、views.pyで、そのビューの認証要件を必ず追加してください。セッション認証セクションとほぼ同じ

permission_classes = (permissions.IsAdminUser,)

また、含む

authentication_classes = (authentication.TokenAuthentication,)

これがお役に立てば幸いですが、そうでない場合は、検索で幸運を祈ります。

14
timothydillman

もちろん、トークンは認証の良い方法ですが、質問者はセッション認証について尋ねています。

要求:

POST /api/v1/login  username='username' password='password' 
  • csrftoken値をヘッダーのX-CSRFTokenに配置
  • ユーザー名としてemailを使用している場合でも、username nameパラメーターはメール入力に必要です(例:username='[email protected]'

応答:

302 FOUND sessionid="blahblah"
  • next値を指定しなかった場合、自動的に/accounts/profile/にリダイレクトされ、404エラーが発生する可能性があります
12

ビューを追加する:

from rest_framework_jwt.views import refresh_jwt_token

urlpatterns = [
    ...
    url(r'^rest-auth/', include('rest_auth.urls')),
    url(r'^rest-auth/registration/', include('rest_auth.registration.urls')),
    ...
    url(r'^refresh-token/', refresh_jwt_token),
]
1
mt2609