Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その1の続きです。django-nonrelを使ってます。
ログアウトする方法と、画面にログイン、ログアウトの表示を出す方法がわかったので書いときます。
まず、ログアウトはdjangoの認証のログアウトを呼び出せば普通にログアウトできました(汗。勉強が足りなかったです…。その方法も引き続き書きますが。
まず、ログアウトするためのURLをurls.pyに登録します。
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インスタンスが使えます。
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に持たせるのには必要っぽいと。解釈が間違ってたらすみません…。
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)。
<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 | 自転車で通勤しましょ♪ブログ