Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その1の続きです。django-nonrelを使ってます。
ログアウトする方法と、画面にログイン、ログアウトの表示を出す方法がわかったので書いときます。
まず、ログアウトはdjangoの認証のログアウトを呼び出せば普通にログアウトできました(汗。勉強が足りなかったです…。その方法も引き続き書きますが。
まず、ログアウトするためのURLをurls.pyに登録します。
1 2 3 4 5 6 7 | urlpatterns = patterns('', url(r '^$' , 'sample.views.index' ), url(r '^logout/' , 'sample.views.logout_view' , name = 'logout' ), url(r '^_ah/warmup$' , 'djangoappengine.views.warmup' ), # openid (r '^openid/' , include( 'django_openid_auth.urls' )), ) |
次に、sample applicationのviews.pyに、logout_viewを定義します。
リダイレクト先はhttp://localhost:8000/にしてます。
また、indexのrender_to_responseで、RequestContextをtemplateに渡す処理をしています。これで、テンプレート側でrequestインスタンスが使えます。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | from django.contrib.auth import logout from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response from django.template.context import RequestContext from sample.sampleform import SampleForm def index(request): form = SampleForm() return render_to_response( 'sample/index.html' , { 'form' : form}, context_instance = RequestContext(request) ) def logout_view(request): logout(request) return HttpResponseRedirect( '/' ) |
requestをテンプレート側でも使うためには、settings.pyに以下の設定が必要らしい?。まだよくわかってませんが、認証情報をrequestに持たせるのには必要っぽいと。解釈が間違ってたらすみません…。
1 2 3 4 5 | TEMPLATE_CONTEXT_PROCESSORS = ( 'django.contrib.auth.context_processors.auth' , 'django.core.context_processors.request' , 'django.core.context_processors.media' , ) |
最後に、テンプレート自体にログイン、ログアウトの書き分けの処理を追加します。私の場合は、どのページでもヘッダにログイン状況を表示させたかったので、templates/base.htmlに追加しました(base.htmlは全てのテンプレートして使っているhtml)。
1 2 3 4 5 6 7 | < div id = "header-user" > {% if request.user.is_authenticated %} < a href = "{% url sample.views.logout_view %}" >ログアウト</ a > {% else %} < a href = "{% url django_openid_auth.views.login_begin %}" >ログイン</ a > {% endif %} </ div > |
これで、ログインしている場合はログアウトのリンクが、ログインしてない場合はログインへのリンクが表示されました。django_openid_authのOpenID認証画面はかなり寂しいうえに使いにくいので、カスタマイズが必要ですが、とりあえずこれでOpenID認証ができるようになりました。よかったよかった!!
Pingback: Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その1 | 自転車で通勤しましょ♪ブログ