[Django] Backendを使ってパスワード無しでログイン
2009年2月16日
Django-1.0.2-final です。
「サイト管理者が指定したユーザとしてログインできる機能」
・・・を作ろうとした時ですが、
authenticate無しではlogin出来ず、
かつ、authenticateは必ず平文のパスワードを要求するので困りました。
変な箇所とかを山程見てたのですが、
DjangoのBackend機能を使ってサックリ実装できることを、
泥棒髭の人に教えてもらいました。 ひゃっほーい!
以下改修した内容です。
1. backends.pyを設置
自分はcommonアプリを作ってたので、site/common/backends.py に配置しました。
記述してあるの2メソッドは必ず作る必要があります。
自分は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)
これを知らなかったら、
あるアクセスだけメソッドを上書きするとか、
そういう力技な対応になってました。
あるアクセスだけメソッドを上書きするとか、
そういう力技な対応になってました。
十四区号を制す! (IMEがんばれよ)