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'


Reply via email to