旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[Django] Backendを使ってパスワード無しでログイン

2009年2月16日

Django-1.0.2-final です。

「サイト管理者が指定したユーザとしてログインできる機能」
・・・を作ろうとした時ですが、
authenticate無しではlogin出来ず、
かつ、authenticateは必ず平文のパスワードを要求するので困りました。

変な箇所とかを山程見てたのですが、
DjangoのBackend機能を使ってサックリ実装できることを、
泥棒髭の人に教えてもらいました。 ひゃっほーい!

以下改修した内容です。

1. backends.pyを設置
自分はcommonアプリを作ってたので、site/common/backends.py に配置しました。
記述してあるの2メソッドは必ず作る必要があります。

# -*- encoding: utf8 -*-
from django.contrib.auth.models import User
class MyBackend(object):
def authenticate(self, username=None, password=None, force=False):
"""force=Trueでパスワード無しでログイン"""
try:
user = User.objects.get(username=username)
if force == True or 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

2. settings.pyに追記

AUTHENTICATION_BACKENDS = [
'site.common.backends.MyBackend',
]

これでこんな風にパス無しログインが可能になりました。

authenticate(username='username', password=None, force=True)

参考) http://d.hatena.ne.jp/perezvon/20071128/1196256178

これを知らなかったら、
あるアクセスだけメソッドを上書きするとか、
そういう力技な対応になってました。

十四区号を制す! (IMEがんばれよ)