나는 장고와 함께 GAE 파이썬을 사용하고 있습니다. 나는 내 코드에 다음과 같은 시도 :직접 공급자 연합 ID를위한 GAE 파이썬 예제
관련 파이썬 코드 :
providers = {
'Google' : 'https://www.google.com/accounts/o8/ud',
'Yahoo' : 'yahoo.com',
}
class BaseRequestHandler(webapp2.RequestHandler):
def generate(self, template_name, template_values={}):
directory = os.path.dirname(__file__)
path = os.path.join(directory, 'templates', template_name)
self.response.out.write(template.render(path, template_values, debug=_DEBUG))
class MainHandler(BaseRequestHandler):
def get(self):
user = users.get_current_user()
log_in_out_url = users.create_login_url(federated_identity="https://www.google.com/accounts/o8/id")
if user:
log_in_out_url = users.create_logout_url(self.request.uri)
template_values = {
'user': user,
'log_in_out_url': log_in_out_url,
"openid_url_google": providers["Google"],
"openid_url_yahoo": providers["Yahoo"],
}
self.generate('homepage.html', template_values);
관련 HTML 코드 :
(내 개발 서버에서 실행하는 경우) 크롬에서 "요소 검사"에<div id="login_username" >
{% if user %}
<span class="loginout"> <a href="{{log_in_out_url}}"> Log Out </a> </span>
{% else %}
<span class="loginout"> <a href="{{log_in_out_url}}"> Log In </a> </span>
{% endif %}
<ul class="dropdown" id="openid_login_providers" >
<li> <a href="{{ openid_url_google }}" > Google </a> </li>
<li> <a href="{{ openid_url_yahoo }}" > Yahoo </a> </li>
</ul>
</div >
, 장고에 의한 다음 치환을 볼 수 있습니다 :
<div id="login_username">
<span class="loginout"> <a href="/_ah/login?continue=http%3A//localhost%3A8080/"> Log In </a> </span>
<ul class="dropdown" id="openid_login_providers">
<li> <a href="https://www.google.com/accounts/o8/id"> Google </a> </li>
<li> <a href="yahoo.com"> Yahoo </a> </li>
</ul>
</div>
[에 제공된 python 예제를 기반으로합니다.]
구글 링크를 클릭하면 파일은 "ID"를 포함하는 다운로드됩니다 이름:
http://localhost:8080/yahoo.com
: 야후 링크를 클릭하면
이
<?xml version="1.0" encoding="UTF-8"?>
<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)">
<XRD>
<Service priority="0">
<Type>http://specs.openid.net/auth/2.0/server</Type>
<Type>http://openid.net/srv/ax/1.0</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/mode/popup</Type>
<Type>http://specs.openid.net/extensions/ui/1.0/icon</Type>
<Type>http://specs.openid.net/extensions/pape/1.0</Type>
<URI>https://www.google.com/accounts/o8/ud</URI>
</Service>
</XRD>
</xrds:XRDS>
, 그것은 다음과 같은 링크를 열려고 시도
나는 명백한 것을 놓치고 있지만 그 사실을 알 수는 없다고 확신합니다. 무엇 내가 뭐하는 거지 잘못된
난 단지 사용자 이름이 을 전달하기 위해 필요하지 않을 것입니다 (구글과 야후 등) 직접 제공자 연합 신원에 로그인 지원을 제공 할 관심변경 리 피스의 제안에 따라 :
당신이class Federated(BaseRequestHandler):
def get(self):
provider_uri = self.request.get('provider')
log_in_out_url = ""
user = users.get_current_user()
if user:
log_in_out_url = users.create_logout_url(federated_identity=provider_uri)
else:
log_in_out_url = users.create_login_url(federated_identity=provider_uri)
self.redirect(log_in_out_url)
return
<ul class="dropdown" id="openid_login_providers" >
<li> <a href="/federated?provider={{ openid_url_google }}" > Google </a> </li>
<li> <a href="/federated?provider={{ openid_url_yahoo }}" > Yahoo </a> </li>
</ul>
덕분에 난 당신이에서 제안 된 변경 사항을 추가했습니다 .. 많이 리 피스 위의 내 질문의 끝 .. 제발 당신이 제발 제안했는지 확인하십시오 .. 또는 수정 또는 개선 .. – gsinha
또한, 위의 솔루션에서 당신이 제안하는 방법, 나는 사용자가 반환하는지 확인합니까 로그인 한 후 동일한 페이지 (링크에서 페더레이션 된 로그인을 클릭 한 곳)로 이동하고 내 홈페이지 (/)가 아닌 ... – gsinha
예 정말 좋은 시작 같아요 .. 나는 또한 대답을 업데이 트하여 변경 사항을 반영 – Lipis