로컬로 mod_wsgi (http : // localhost/...)를 실행중인 web.py 앱이 있습니다. 내 애플 리케이션에 인증을 추가하고 web.py의 내장 모듈을 사용하려고했다. 나는 여기 간단한 예제로 시작 : http://log.liminastudio.com/programming/howto-use-openid-with-web-py는web.py와 web.webopenid를 사용하여 사용자 인증
import web, web.webopenid
urls = (
r'/openid', 'web.webopenid.host',
r'/', 'Index'
)
app = web.application(urls, globals())
class Index:
def GET(self):
body = '''
<html><head><title>Web.py OpenID Test</title></head>
<body>
%s
</body>
</html>
''' % (web.webopenid.form('/openid'))
return body
if __name__ == "__main__": app.run()
이 충분히 터미널에서 실행 및 http://localhost:8080/에가는 작동합니다. 또 다른 예로 http://c-farrell.blogspot.com/2010/11/usrbinenv-pythonimport-webfrom-web.html도 비슷한 기술을 사용하지만 나에게 더 의미가 있습니다.
#!/usr/bin/env python
import web
from web import webopenid
urls = (
'/', 'index',
'/openid', 'webopenid.host',
)
... more code ...
class index:
def GET(self):
oid = webopenid.status()
if not oid:
return 'please log in: ' + \
webopenid.form('/openid')
else:
return 'you are logged in as:' + \
webopenid.form('/openid')
여기가 조금 어둡습니다. 내가 말할 수있는 바에 따르면 form
에 전달 된 인수는 로그인 한 후 반환 URL입니다. 예를 들어, 'http://www.yahoo.com/'을 입력하면 모든 로그인 시도 후에 거기로 이동하게됩니다. 나는 이것이 내 자신의 컨트롤러를 다시 가리켜 야한다고 생각하지만 컨벤션은 web.webopenid.host 컨트롤러를 사용하는 것으로 보입니다.이 컨트롤러는 ID를 처리하고 기본 '/'URL로 리턴합니다. 나는 거기에 가고 있다고 생각하지만 반환 된 상태는 항상 None
입니다.
내가 수집 한 것부터 이것은 코드 문제이거나 아파치 설정에 인증 기능이 작동하지 않는 것입니다. web.webopenid에서 라이브러리는 웹 서버와 동일한 디렉토리에 .openid_secret_key 파일을 만듭니다. 예제 코드를 실행하면 이것이 생성됩니다. 아파치를 통해 코드를 실행할 때 (최소한 cgi-bin에 있지 않습니다.) 어쨌든,이 파일이 생성되거나 매번 다시 생성되지 않으면 로그인이 유지되지 않습니다. web.py 웹 서버를 통해 내 응용 프로그램을 실행하려고 시도했을 때 아파치 문제라고 생각하고 파일을 생성하고 인증 할 수있었습니다. 필자가 결론을 내릴 수있는 것은이 파일이 쓰여지고 있지 않으며 모든 후속 쿼리가 새 파일을 시도하기 때문에 결코 인증 할 수 없다는 것입니다. 어떤 아파치/mod_wsgi 전문가가이 파일을 쓰고 있는지 또는 이것이 실제 문제인지 설명해 줄 수 있습니까?
나는/tmp에 직접 쓰도록 라이브러리를 수정했지만 여전히 성공하지 못했습니다. 아직 파일 문제라고 확신하지 못합니다. – voodoogiant