OpenID
Django에서 Python OpenID 사용하기
- Python OpenId를 설치한다. 아래와 같이 easy_install로 설치하면 편하다. 현재 이 문서의 기준은 2.0 rc2 이다.
- $ sudo easy_install python-openid
- Django 프로젝트에서, session을 활성화 시켜둬야 한다. 해당 프로젝트의 settings.py 에 다음 내용이 있어야 한다.
INSTALLED_APPS = (
'기타 등등...',
'django.contrib.sessions',
)
- 로그인 화면에서 사용자가 <input type="text" name="openid" />에 오픈아이디를 기입하고 로그인을 요청했고, 그 요청을 login 이라는 view 함수가 받는다(물론 이름은 얼마든지 바꿔도 된다.
-
from django.http import HttpResponseRedirect, HttpResponse, HttpResponseServerError
-
from openid.consumer import consumer
-
from openid.store import filestore
- # OpenID 공유 정보를 저장한 스토어를 특정 디렉토리로 지정한다.
- # 원칙적으로 메모리를 스토어로 사용해도 되지만, 그럴 경우 mod_python이 여러개의 프로세스로 뜨기
- # 때문에 해당 메모리를 공유하지 못해서 오류가 발생할 수 있다. 그러므로 되도록 File 처럼 프로세스와
- # 무관하게 공유 가능한 저장소를 사용한다.
-
store = filestore.FileOpenIDStore('/project_home/data/openid-store')
# 사용자가 OpenID를 입력하면 이 view 함수로 온다. login view 함수는 로그인 정보를 구축하고 - # OpenID 제공자로 리다이렉트한다.
-
def login(req):
-
openid = req['openid']
-
-
oidconsumer = consumer.Consumer(req.session, store) # 세션이 필요하다.
-
request = oidconsumer.begin(openid)
-
server_path = 'http://' + req.META['HTTP_HOST']
-
trust_root = server_path + '/'
-
return_to = server_path + '/login_finish/'
- # 아래는 Simple Registration 요청인데, Python OpenID 2.0이 OpenID Spec 2.0 기준이라서,
- # 현재(2007) OpenID 스펙 1.0 기준의 우리나라 OpenID 제공자에서는 작동하지 않는 것으로 보인다.
- # Python OpenID 1.0을 기준으로 테스트 해 볼 것.
# request.addExtensionArg('sreg', 'optional', 'nickname,email')
-
-
return HttpResponseRedirect(request.redirectURL(trust_root, return_to, immediate=False))
-
def login_finish(req):
-
oidconsumer = consumer.Consumer(req.session, store)
-
-
info = oidconsumer.complete(dict(req.GET.items())) # 로그인 정보 취합 완료
-
-
if info.status == consumer.SUCCESS:
-
# 현재 OpenID를 세션에 저장하고 로그인을 완료한다.
-
req.session['user'] = info.identity_url # OpenID가 저장돼 있는 변수
-
return HttpResponseRedirect('/어딘가로그인후 화면')
-
else:
-
return HttpResponseServerError('OpenID Error') # 대충 낸 에러 메시지
History
Last edited on 08/14/2007 11:40 by kwon37xi
Comments (0)