2012-06-22 68 views
2

所以我想爲我的GAE應用程序做我自己的openID登錄,我遇到了一些問題。它在我的本地主機上運行時運行良好,但當我嘗試部署它時,它不運行。我認爲這是因爲它實際上並未嘗試到達本地主機上的openID服務器。OpenID登錄不太工作

這是我的錯誤:

File "/base/data/home/apps/s~exployretrial/1.359795154076948420/blog.py", line 97, in get 
    providerlist.append(users.create_login_url(federated_identity=uri)) 
    File "/base/python27_runtime/python27_lib/versions/1/google/appengine/api/users.py", line 246, in create_login_url 
    req.set_federated_identity(federated_identity) 
    File "cpp_message.pyx", line 124, in cpp_message.SetScalarAccessors.Setter (third_party/apphosting/python/protobuf/proto1/cpp_message.cc:2229) 
TypeError: <type 'tuple'> has type <type 'tuple'>, but expected one of: str, unicode 

這裏是我的Python代碼:

providers = { 
    'Google' : 'www.google.com/accounts/o8/id', # shorter alternative: "Gmail.com" 
    'Yahoo' : 'yahoo.com', 
    'MySpace' : 'myspace.com', 
    'AOL'  : 'aol.com', 
    'MyOpenID' : 'myopenid.com' 
    # add more here 
} 

class Login(BlogHandler): 
    def get(self): 
     user = users.get_current_user() 
     providerlist = [] 
     if user: # signed in already 
      self.redirect('/home') 
     else:  # let user choose authenticator 
      for uri in providers.items(): 
       providerlist.append(users.create_login_url(federated_identity=uri)) 
      self.render('login.html', user = user, providerlist = providerlist) 

HTML代碼:

<ul> 
{% for provider in providerlist %} 
    {% if loop.index == 1 %} 
    <li><a href="{{ provider }}"><img src="http://openid.net/wordpress-content/uploads/2007/10/aol.png"></a></li> 
{% elif loop.index == 2 %} 
    <li><a href="{{ provider }}"><img src="http://openid.net/images/get-logos/google.png"></a></li> 
{% elif loop.index == 3 %} 
    <li><a href="{{ provider }}"><img src="http://openid.net/wordpress-content/uploads/2009/11/yahoo.png"></a></li> 
{% elif loop.index == 4 %} 
    <li><a href="{{ provider }}"><img src="http://openid.net/images/get-logos/myopenid.png"></a></li> 
{% elif loop.index == 5 %} 
    <li><a href="{{ provider }}"><img src="http://openid.net/wordpress-content/uploads/2007/10/logo_myspace_s.gif"></a></li> 
{% endif %} 
{% endfor %} 
</ul> 

因此,任何有識之士將不勝感激,只是讓我知道你是否需要更多信息。

謝謝!

回答

1

從GAE上的應用程序設置將Authentication Options更改爲(Experimental) Federated Login而不是Google Accounts API

+0

我已經這樣做了,當我做一個簡單的不使用任何HTML的Python腳本,但我只是希望它看起來像樣的標誌和一切。 – clifgray

+0

@clifgray嗯..如果嘗試整合此插件,可以讓它看起來更好一點:http://code.google.com/p/openid-selector/ – Lipis