2011-12-18 176 views
3

Tumblr提供了一个非常简单的界面,可以将您的Twitter和Facebook帐户链接到他们的服务。我想在我的应用程序中做类似的事情 - 为人们提供单一点来汇总Flickr,Facebook,Twitter等不同帐户 - 而且我不希望每年花费1000美元用于Janrain的帐户映射这样做。如何使用OAuth&web2py汇总帐户?

如何使用web2py链接多个帐户?我有一种感觉,我应该start here,但希望有更具体的教程或最佳实践记录。

回答

1

这里我正在做什么,以便使用我的Twitter帐户登录到我的应用程序。

首先,您需要在此处签署Twitter应用程序并获取https://dev.twitter.com/ 以及应用程序密钥,应用程序令牌等。 然后在你的web2py应用程序编辑db.py文件,并确保您具备以下条件:

## create all tables needed by auth if not custom tables 
auth_table = db.define_table(
    auth.settings.table_user_name, 
    Field('first_name', length=128, default=""), 
    Field('last_name', length=128, default=""), 
    Field('username', length=128, default="", unique=True), 
    Field('password', 'password', length=256, 
      readable=False, label='Password'), 
    Field('registration_id', length=128, default= "", 
      writable=False, readable=False)) 

auth_table.username.requires = IS_NOT_IN_DB(db, auth_table.username) 

auth.define_tables() 

在同一文件中添加的底部:

# Twitter API 
consumer_key = <your key> 
consumer_secret = <your secret> 

request_token_url = 'https://twitter.com/oauth/request_token' 
access_token_url = 'https://twitter.com/oauth/access_token' 
authorize_url = 'https://twitter.com/oauth/authorize' 

import gluon.contrib.simplejson as json 

class TwitterOAuth(OAuthAccount): 
    def get_user(self):   
     if self.accessToken() is not None:    
      client = Client(self.consumer, self.accessToken()) 
      resp, content = client.request('http://api.twitter.com/1/account/verify_credentials.json') 
      if resp['status'] != '200': 
       # cannot get user info. should check status 
       return None 
      u = json.loads(content)    
      return dict(username=u['screen_name'], name=u['name'], registration_id=str(u['id'])) 



auth.settings.login_form=TwitterOAuth(globals(),consumer_key,consumer_secret, 
authorize_url, request_token_url, access_token_url) 

这就是全部。

一切工作细到我

干杯