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 | 自転車で通勤しましょ♪ブログ