Header

  1. View current page

    권남이의 스프링노트

Profile_img_60x60_01
71

OpenID

Django에서 Python OpenID 사용하기

  • Python OpenId를 설치한다. 아래와 같이 easy_install로 설치하면 편하다. 현재 이 문서의 기준은 2.0 rc2 이다.
  1. $ sudo easy_install python-openid
  • Django 프로젝트에서, session을 활성화 시켜둬야 한다. 해당 프로젝트의 settings.py 에 다음 내용이 있어야 한다.

INSTALLED_APPS = (

   '기타 등등...',

    'django.contrib.sessions',
)

  • 로그인 화면에서 사용자가 <input type="text" name="openid" />에 오픈아이디를 기입하고 로그인을 요청했고, 그 요청을 login 이라는 view 함수가 받는다(물론 이름은 얼마든지 바꿔도 된다.
  1. from django.http import HttpResponseRedirect, HttpResponse, HttpResponseServerError

  2. from openid.consumer import consumer

  3. from openid.store import filestore

     

  4. # OpenID 공유 정보를 저장한 스토어를 특정 디렉토리로 지정한다.
  5. # 원칙적으로 메모리를 스토어로 사용해도 되지만, 그럴 경우 mod_python이 여러개의 프로세스로 뜨기
  6. # 때문에 해당 메모리를 공유하지 못해서 오류가 발생할 수 있다. 그러므로 되도록 File 처럼 프로세스와
  7. # 무관하게 공유 가능한 저장소를 사용한다.
  8. store = filestore.FileOpenIDStore('/project_home/data/openid-store')

     

    # 사용자가 OpenID를 입력하면 이 view 함수로 온다. login view 함수는 로그인 정보를 구축하고
  9. # OpenID 제공자로 리다이렉트한다.
  10. def login(req):

  11.     openid = req['openid']

  12.  

  13.     oidconsumer = consumer.Consumer(req.session, store) # 세션이 필요하다.

  14.     request = oidconsumer.begin(openid)

  15.     server_path = 'http://' + req.META['HTTP_HOST']

  16.     trust_root = server_path + '/'

  17.     return_to = server_path + '/login_finish/'

     

    1. # 아래는 Simple Registration 요청인데, Python OpenID 2.0이 OpenID Spec 2.0 기준이라서,
    2. # 현재(2007) OpenID 스펙 1.0 기준의 우리나라 OpenID 제공자에서는 작동하지 않는 것으로 보인다.
    3. # Python OpenID 1.0을 기준으로 테스트 해 볼 것.

        # request.addExtensionArg('sreg', 'optional', 'nickname,email')

  18.  

  19.     return HttpResponseRedirect(request.redirectURL(trust_root, return_to, immediate=False))

     

  20. def login_finish(req):

  21.     oidconsumer = consumer.Consumer(req.session, store)

  22.  

  23.     info = oidconsumer.complete(dict(req.GET.items())) # 로그인 정보 취합 완료

  24.  

  25.     if info.status == consumer.SUCCESS:

  26.         # 현재 OpenID를 세션에 저장하고 로그인을 완료한다.

  27.         req.session['user'] = info.identity_url # OpenID가 저장돼 있는 변수

  28.         return HttpResponseRedirect('/어딘가로그인후 화면')

  29.     else:

  30.         return HttpResponseServerError('OpenID Error') # 대충 낸 에러 메시지

 

History

Last edited on 08/14/2007 11:40 by kwon37xi

Comments (0)

You must log in to leave a comment. Please sign in.