2

基本的に、私は現在login/urls.pyリダイレクトしていますが、django.contrib.auth.views.loginうまくいくようです。

ただし、従来の mysql/php サイトからパスワードを移植しているので、http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-informationに従って新しいモデル プロファイルを作成するだけでよいと考えています。 -ユーザーについて。この新しいモデル/テーブルには、古い md5 パスワード列があり、ユーザー名をメインのユーザー テーブルに移植します。

ログイン方法を変更して、ユーザーがauth_userテーブルにパスワードを持っているかどうかを最初に確認し、そうでない場合は POSTpasswordフィールドを md5 し、それを新しいプロファイル パスワード列に一致させようとします。auth_user管理者が行う方法のようにSHA1暗号化によるテーブル?

4

2 に答える 2

5

以下に沿って何かを行う新しいビューを作成します。

from django.contrib.auth.models import User, check_password
import hashlib

def login_with_lookup(request):
    if request.POST: # If you want to restrict to POST
        username = request.POST['username']
        password = request.POST['password']
        user = User.objects.get(username=username)
        profile = user.get_profile()
        if profile.old_password != '' and profile.old_password == hashlib.md5(password).hexdigest():
            user.set_password(password)
            profile.old_password = ''
            user.save() # Might need to save profile as well, not sure how it works
        if check_password(password, user.password):
            login(request, user)
    #Whatever else you want to do, followed by a render to template or redirect

これはテストされていないため、少しクリーンアップする必要があります。また、失敗した場合を処理するために、さまざまなポイントでエラー チェックが必要になります (この例では、成功を前提としています)。

于 2010-03-09T14:30:46.370 に答える
2

カスタム認証バックエンドを作成します。

http://docs.djangoproject.com/en/1.1/topics/auth/#writing-an-authentication-backend

于 2010-03-09T18:17:03.950 に答える