ここで深刻な助けが必要です。
Django/pythonで記述されたアプリケーションがあり、それを拡張して、このアプリケーションの「アプリ」として他のソリューションを含める必要があります。たとえば、統合するアプリの名前は「my_new_app」です。メインアプリケーション用に作成されたバックエンド認証があり、使用できません。クエリを実行するmysqldbがあり、メインアプリは主にcassendraとredisを使用します。だから私の質問は、新しいアプリ「my_new_app」に個別の認証バックエンドを使用して、同じドメインで両方を実行する方法はありますか?質問はそれほど明確ではないかもしれません、私は尋ねられたら明確にします。
私は以前にこの問題を経験したことがあります。これは私が使用したコードです。
これは、api /backend.pyの認証バックエンドです。
from Django.contrib.auth.models import User
class EmailOrUsernameModelBackend(object):
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
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 = (
'api.backend.EmailOrUsernameModelBackend',
'Django.contrib.auth.backends.ModelBackend',
)
それが役に立てば幸い。それでも問題が解決しない場合は教えてください。このコードを使用すると、電子メールを使用して、Django adminでもデフォルトのDjangoユーザーを認証できます。
複数のバックエンド認証の使用は、パイと同じくらい簡単です。 Djangoアプリのワークフローを理解する必要があります。
AUTHENTICATION_BACKENDS = (
'Django.contrib.auth.backends.Backend1',
'Django_openid_auth.auth.Backend2',
)
たとえば、次の2つのバックエンドが定義されています。 Djangoは最初に最初のバックエンドに移動し、そのバックエンドにロジックを配置するだけで、そのバックエンドに関連していない場合は、他のバックエンドに転送されるか、結果なしで返されます。結果がない場合Djangoは自動的にリクエストを最初のバックエンドから2番目にシフトし、利用可能な場合は3番目のバックエンドにシフトします。これに多くの時間を費やし、それほど複雑ではないことがわかりました。
複数の認証バックエンドの使用は非常に簡単です。これをsettings.pyに追加するだけです。
AUTHENTICATION_BACKENDS = (
'social_core.backends.open_id.OpenIdAuth',
'social_core.backends.google.GoogleOpenId',
'social_core.backends.google.GoogleOAuth2',
'social_core.backends.google.GoogleOAuth',
'social_core.backends.facebook.FacebookOAuth2',
'Django.contrib.auth.backends.ModelBackend',
)
これによりサインアップページで問題が発生する可能性があるため、views.pyファイルのサインアップビューに次のようにログイン引数を追加しますlogin(request、user、backend = 'Django.contrib.auth.backends.ModelBackend')
def signup_view(request):
if request.method=='POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user=form.save()
login(request, user, backend='Django.contrib.auth.backends.ModelBackend')
return redirect('home')