1

私はまだDjangoにかなり慣れていないので、ログインメソッドを作成しようとしています。ユーザーがログインを維持できるように、それを実行して情報をセッションに保存するための最良のロジックは何ですか?

次のような認証モデルがあります。

class User(models.Model):
    email_address = models.CharField(max_length=128)
    password = models.CharField(max_length=128) # sha512 of password w/salt
    password_salt = models.CharField(max_length=128) # sha512 of random number as salt

基本的に、次のようなビューのログインメソッドを記述します。

@ratelimit_post(minutes = 1, requests = 5, key_field = 'email_address')
def login(request):
    requestedUser = User.objects.get(email_address=request.POST['email_address'])

    if requestedUser == None:
        fail_no_user()

    passwordHash = sha512(request.POST['password'] + requestedUser.password_salt)

    if requestedUser.password != passwordHash:
        fail_wrong_password()
    else:
        request.session['user_id'] = user.id
        request.session['is_auth'] = True
        success_login()

これは、Djangoとのログインとセッションを処理する安全な方法ですか?私はまだ新しいので、これが受け入れられているアプローチかどうかはわかりません。ここで欠けているセキュリティとパフォーマンスの面で何かありますか?

4

2 に答える 2

2

おそらく最良のオプションは、独自のバックエンドを作成することです。

こちらのドキュメントを参照してください:https ://docs.djangoproject.com/en/dev/topics/auth/#writing-an-authentication-backend

認証バックエンドの作成

認証バックエンドは、get_user(user_id)とauthenticate(** credentials)の2つのメソッドを実装するクラスです。

于 2011-09-16T02:04:37.843 に答える
0

Djangoには非常にシンプルで強力な認証システムが付属しています。こちらが公式ドキュメントです。

于 2011-09-16T07:20:08.613 に答える