サードパーティ サービス (Facebook、LinkedIn など) からの一意の ID に基づいてユーザーをログインさせるカスタム認証バックエンドを Django に実装しようとしています。一意の識別子が戻ってきたので、シームレスにログインしたいと思います。
しかし、カスタム バックエンドが機能せず、「None」が返されます。
これが私のカスタムバックエンドです:
from myapp.models import Account
from django.contrib.auth.models import User
class ThirdPartyServiceBackend(object):
def authenticate(self,acct_id=None):
if acct_id is not None:
try:
return User.objects.get(account__uniq_id=acct_id)
except:
return None
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
settings.py でこのバックエンドを有効にしました。
AUTHENTICATION_BACKENDS = (
'myproject.myapp.backends.ThirdPartyServiceBackend',
'django.contrib.auth.backends.ModelBackend',
)
そして、これは私がviews.pyでそれを処理する方法です:
# oauth processing and everything goes here
try:
# login and redirect to search page
user = authenticate(acct_id=third_party_service_user_info['id'])
if user is not None:
auth_login(request,user)
return HttpResponseRedirect('/')
この呼び出しはシェルで問題なく機能します。ユーザーが返されます。しかし、認証呼び出しは失敗しています - 私が間違っていることについて何か考えはありますか?