2016-03-18 11 views
0

この質問のドキュメントはhttps://docs.djangoproject.com/en/1.9/topics/auth/customizing/ですが、私の使用例についてはいくつかの説明が必要です。djangoのカスタムユーザによるカスタム認証?

私は基本的に私が作成したapiを持っています。このapiが行うことは、ユーザーフォームデータを外部URLに送信し、一度送信するとそのデータがその外部URLデータベースに保存されます。

次に、別のAPI呼び出しによって特定のユーザーを取得できます。ユーザーはオブジェクトとして返されます。今私は自分のシステムを介してdjango.contrib.authを使って私の最後にそのユーザをログインしようとしていますが、私が持っているものは動作していません。ここで

は私のプロセスである:私は私のnew_appのバックエンドファイルでは、私のsettings.pyファイル

AUTHENTICATION_BACKENDS =(
    'new_app.backends.SettingsBackend', 
    'django.contrib.auth.backends.ModelBackend', 
) 

B.にカスタム認証バックエンドを追加

A.、私は次のコードを持っている:

サインインビューで
class SettingsBackend(object): 
    def authenticate(self, username=None, password=None): 
      if username and password: 
       user = api.get_user() 
       #add pk to user object to satisfy django error warning 
       user.pk = user.unique_field 
       return user 
      return None 

    def get_user(self, user_id): 
     try: 
      if self.user.pk == user_id: 
       return self.user 
     except: 
      return None 

、私はこれを使用してユーザーをログインしようとしています:

def login_user(request, username, password): 
    from django.contrib import auth 
    if not username and password: 
     raise ValueError("Invalid username and password") 

    auth_user = auth.authenticate(username=username, password=password) 

    if auth_user is None: 
     raise ValueError("Invalid username and password") 

    auth.login(request, auth_user) 
    return auth_user 

私はエラーが言ってもらう:

'api.get_user()' object has no attribute 'save' 

エラーがauth.login(request, auth_user)ライン上に発生しています。

私はdjango.contrib.authが自分のユーザーオブジェクトがdjangoモデルだと思っているからです。だから、私のシナリオでは、この問題にどのように対処しなければならないのでしょうか?ありがとうございました。

+0

あなたは変更されたユーザーモデルを設定しましたか? – RA123

+0

@ RA123お返事ありがとうございます。私はこれが典型的なdjangoユーザモデルではないので、必要ではないと思ったので、私はしませんでした。私は近くにいるように感じますが、おそらくdjango.contrib.authを使用せずに自分のauthメソッドを作成する必要がありますが、それは私がいくつかのガイダンスを必要とする場所です。 – user875139

+0

djangoのユーザモデル – RA123

答えて

0

私はジャンゴの微妙な点で専門家ではありません(私はマイクロフレームワークのためにジャンゴをやっていたのですが)。

私があなただったら、api.get_user()が返ってきたことを確認し、そのオブジェクトからdjangoが期待しているAPIを実装してください。つまり、空のsave()メソッドから始まることを意味します。

しかし、@ RA123がコメントで示唆しているように、標準的なdjangoのものをやっています。AUTH_USER_MODELを設定してください。

+0

入力していただきありがとうございます!それを今見て。私はそれが働いているときに回答を投稿します。 – user875139

関連する問題