Как объединить учетные записи, используя OAuth & web2py? - PullRequest
3 голосов
/ 19 декабря 2011

Tumblr предоставляет очень простой интерфейс для связи ваших учетных записей Twitter и Facebook для публикации через их сервис. Я хотел бы сделать что-то похожее в своем приложении - дать людям возможность объединять разные учетные записи, такие как Flickr, Facebook, Twitter и т. Д., И я не хочу тратить 1000 долларов в год на сопоставление учетных записей Janrain. для этого.

Как связать несколько учетных записей в совокупности с помощью web2py? У меня такое чувство, что мне следует начать здесь , но я надеялся, что были задокументированы более конкретные учебные пособия или рекомендации.

1 Ответ

1 голос
/ 08 августа 2012

вот что я делаю, чтобы использовать мою учетную запись в твиттере для входа в мое приложение.

Прежде всего вам нужно подписаться на твиттер-приложение здесь и получить 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)

Вот и все.

У меня все работало нормально

Приветствия

...