2017-02-06 2 views
2

JWT(JSON Webトークン)認証でDRFを使用しています。私はdjangoの組み込みのリセットパスワード機能を使いたいです。 csrf token missingエラーにhttps://.../password_reset/結果を呼び出すと、もちろん、APIの下で、contrib.authビューでDjango Restフレームワークを接続する方法

url('^', include('django.contrib.auth.urls')), 

しかし:だから、私は、URLが含まれています。私はこれを解決するためにどのような取り組みをすべきか疑問に思います。組み込みのreset_passwordビューを変更してcsrf保護を削除する必要がありますか? emailreset_passwordビューポストパラメータ)を受け入れて何らかの形でcsrfトークンを生成し、redirect(reverse("reset_password"), email=email) ...というビューに送信するDRFエンドポイントを作成することをお勧めしますが、redirectpostリクエストをreset_passwordビュー。電子メールをsessionに保存していますか?どんな助言も役に立ちます。

+0

これをチェックアウト:https://github.com/sunscrapers/djoser は、あなたがする方が簡単な場合があります。 –

+0

あなたの認証/パスワードリセットなどのためにdjango-rest-authを試すことができます:http://django-rest-auth.readthedocs.io/ja/latest/api_endpoints.html – sarc360

答えて

3

パスワードリセットエンドポイントの場合、CSRF保護を削除しても安全だと思います。 CSRF保護は、認証されたエンドポイントに対して、他のWebサイトがユーザーの保存された資格情報を使用して不正なアクセスを取得するのを防ぎます。 Djangoが使用するPasswordResetFormは電子メールを送信する以外に何もしないので、攻撃者はパスワードリセット電子メールでスパムすることでユーザを悩ませること以外にはほとんどできません。

はこれに第三者を使用できますが、パスワードリセットエンドポイントを追加するだけであれば、数行のコードが必要です。

views.py

import json 

from django.contrib.auth.forms import PasswordResetForm 
from django.http.response import HttpResponse 
from django.views.decorators.csrf import csrf_exempt 
from django.views.decorators.http import require_http_methods 


@csrf_exempt 
@require_http_methods(['POST']) 
def email_password_reset(request): 
    # the POST body should be in the format {'email': '[email protected]'} 
    try: 
     # you could also uncomment the following line if you wanted this view to be anonymous only 
     # assert not request.user.is_authenticated() 
     assert request.META.get('CONTENT_TYPE', '') == 'application/json' 
     body = json.loads(request.body) 
    except (AssertionError, TypeError): 
     pass 
    else: 
     form = PasswordResetForm(body) 

     if form.is_valid(): 
      form.save() 
    finally: 
     return HttpResponse(status=200) 

urls.py

urlpatterns = patterns(... 
    url(r'^/api/password_reset/$', 'email_password_reset', name='email-password-reset') 
...) 
関連する問題