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'