我在Python 3上使用Django 1.8.4,並嘗試創建一個auth後端,它驗證來自傳統ColdFusion網站的cookie並在檢查數據庫中的值後創建/登錄Django用戶。在設置中,我包括後端:Django自定義驗證後端似乎沒有被調用?
AUTHENTICATION_BACKENDS = (
'site_classroom.cf_auth_backend.ColdFusionBackend',
)
而後端本身的代碼; SiteCFUser是對其中包含的活動cookie標記值的SQL Server數據庫用戶模型的模型:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from users.models import SiteCFUser
class ColdFusionBackend(ModelBackend):
"""
Authenticates and logs in a Django user if they have a valid ColdFusion created cookie.
ColdFusion sets a cookie called "site_web_auth"
Example cookie: [email protected]+username+domain+8E375588B1AAA9A13BE03E401A02BC46
We verify this cookie in the MS SQL database 'site', table site_users, column user_last_cookie_token
"""
def authenticate(self, request):
User = get_user_model()
print('Hello!')
token=request.COOKIES.get('site_web_auth', None)
print('Token: ' + token)
cookie_bites = token.split('+')
if cookie_bites[0] != "[email protected]":
# Reality check: not a valid site auth cookie
return None
username = cookie_bites[1]
cf_token = cookie_bites[3]
try:
site_user = SiteCFUser.objects.using('mssqlsite').filter(cf_username=username)
except:
# No user found; redirect to login page
return None
if site_user[0].cftoken == cf_token:
try:
# Does the user exist in Django?
user = User.objects.get(username=username)
except:
# User does not exist, has a valid cookie, create the User.
user = User(username=username)
user.first_name = site_user[0].cf_first_name
user.last_name = site_user[0].cf_last_name
user.email = site_user[0].cf_email
user.save()
else:
return None
def get_user(self, user_id):
User = get_user_model()
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
的問題是,後端似乎不打一個有風景的URL與@login_required
時調用,或甚至嘗試通過使用用戶名和密碼的表單登錄。如果我通過在設置中更改類的名稱來強制出現錯誤,或者在cf_auth_backend.py中更改類的名稱,則會出現錯誤。但是,控制檯中沒有顯示任何打印語句。我很明顯在這裏錯過了一些東西:任何想法我沒有做對嗎?
如果用戶尚未通過身份驗證,則所有'@ login_required'都會重定向到登錄頁面。您需要顯示該視圖的代碼。 –