2017-01-12 57 views
0

私はこのコードを持っている:DjangoのログインはAttributeError:「AnonymousUser」オブジェクトが属性「_meta」を持っていない

from django.contrib.auth import logout, login, authenticate 
... 
    if User.objects.filter(email=email).exists(): 
     existing_user = User.objects.get(email=email) 

     user = authenticate(username=existing_user.username, password=existing_user.password) 

     login(request, user) 

ドキュメントによると、これは動作するはずですが、それは、それは私にエラーを与えていません。

request.session[SESSION_KEY] = user._meta.pk.value_to_string(user) AttributeError: 'AnonymousUser' object has no attribute '_meta'

Django Rest FrameworkでJWT認証を使用しているために問題が発生する可能性がありますか?これはちょうどdjangoで動くAPIなので、別のシナリオだと思いますが、何が問題の原因になっているのか分かりません。

+4

完全なトレースバックを表示します。しかし、あなたのコードは**意味がありません**; 'authenticate'は、データベースに保存された*ハッシュ値*パスワードと比較することによって、ユーザを取得します。ユーザーを別々に取得する必要はなく、ここでは 'authenticate'は常に*失敗します。 –

+0

こんにちは@DanielRoseman。それでは、パスワードを手に入れずに、ビューでユーザーにログインするにはどうしたらいいですか?アプリは私にFacebookのトークンを送って、FbのAPIを使ってトークンを確認した後、電子メールを受け取って、それがすでに存在するかどうかを確認します(残っているコードは貼り付けられています)。そのユーザーにログインします。私は 'authenticate'と' login'を使って解決すると思っていましたが、今はそうではありません。 – alejoss

+2

独自の認証バックエンドを実装して、パスワードなしでユーザーを認証することができます。トークン認証の例は、https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#writing-an-authentication- backendにあります。 –

答えて

1

DRFユーザーは、認証クラス内で認証される必要があります。 ThisライブラリはJWT認証用に1つを提供します。トークンの生成と検証の両方を提供します。

ユーザーは、ViewまたはViewSetクラスでself.request.userという名前になります。あなただけのJWTの認証を許可する必要があります。

class ExampleView(APIView): 
    authentication_classes = (BasicAuthentication, JSONWebTokenAuthentication) 

またはそれ以上のセットは、文書化さhereとしてDEFAULT_AUTHENTICATION_CLASSESようです。

関連する問題