Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その2

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認証ができるようになりました。よかったよかった!!


タグ Django, GAE for Python, Python | パーマリンク.

コメント・トラックバック一覧

  1. Pingback: Django:GAEでdjango_openid_authを使ってOpenID認証を実装する その1 | 自転車で通勤しましょ♪ブログ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です