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"
Django-rest-framework-jwt のAPIビューをご覧ください。これは、Cookieセッションではなく認証トークンを作成するための実装ですが、実装も同様です。 views.py および serializers.py を参照してください。おそらくserializers.py
を変更せずに使用し、適切なパラメーターを返すようにビューを調整し、セッションCookieを設定することができます(認証で既に実行されている場合は思い出せません)。
このようなものが必要な場合は、同じことを行いますが、トークン認証を使用します。
トークンページを確認してください こちら
これはあなたが望むものではないかもしれませんが、私はそれを行う方法です(モバイルクライアントの残りの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,)
これがお役に立てば幸いですが、そうでない場合は、検索で幸運を祈ります。
もちろん、トークンは認証の良い方法ですが、質問者はセッション認証について尋ねています。
要求:
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エラーが発生する可能性がありますビューを追加する:
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),
]