Can anyone recommend this code over that in contrib /login_methods/linkedin_account.py ?
On Wednesday, 4 April 2012 06:49:46 UTC+1, Udi Milo wrote: > > It took a while to figure out, but this is my version on how to use > linkedIn in web2py, > comments are much appreciated. (its very detailed and intended for people > that are just starting out like me) > > Enjoy! > > first thing, go to linkedIn.com and get your key and secret. > after getting it: > > *1. add linkedIn.py and model.py to Modules from the python-linkedin lib* > *2. add the linkedinAccount.py to modules. modify it to look like:* > > from gluon.http import HTTP > try: > import linkedin > except ImportError: > raise HTTP(400,"linkedin module not found") > > class LinkedInAccount(object): > def __init__(self,request,session,key,secret,return_url): > self.request = request > self.session = session > > if self.session.linkedin is None: > self.session.verified = False > self.session.linkedin = > linkedin.LinkedIn(key,secret,return_url, gae=True) > self.session.linkedin.request_token() > > def verify(self, verifier): > self.session.verified = verifier and > self.session.linkedin.access_token(verifier = verifier) > return self.session.verified > > def login_url(self, next="/"): > return self.session.linkedin.get_authorize_url() > > def logout_url(self, next="/"): > self.session.linkedin = None > return next > > def get_user(self): > if self.session.verified: > profile = self.session.linkedin.get_profile(fields=['id', > 'first-name', 'last-name','picture-url','industry']) > return dict(first_name = profile.first_name, > last_name = profile.last_name, > picture_url = profile.picture_url, > industry = profile.industry, > username = profile.id) > > *3. add the following to your dal.py* > > ## LinkedIn > > auth.settings.actions_disabled=['register','change_password','request_reset_password','retrieve_username'] > from linkedinAccount import LinkedInAccount > auth.settings.login_form=LinkedInAccount( > request, > session, > KEY, > SECRET, > 'http://' + request.env.http_host + '/user/verify') > > and just above "auth.define_tables()" add this: > > ## create custom field 'username' for linkedin authentication > auth.settings.extra_fields['auth_user']= [ > Field('username', writable=False, readable=False), > Field('picture_url', writable=False, readable=False), > Field('industry', writable=False, readable=False), > ] > > *4. add the following to your default.py, the user function (clear is a > debug tool, in case your session expires or you play with it and you need > to remove it)* > > def user(): > if len(request.args)>0 and request.args(0)=='verify': > auth.settings.login_form.verify(request.vars.oauth_verifier) > redirect(URL('user', 'login')) > > if request.args(0)=='clear': > session.linkedin = None > return 'clean' > > > --