Having used Udi's additions to Web2py to get basic authentication using 
LinkedIn working I'd like to interact with the LinkedIn API.

I can get to this functonality using linkedin.py (by Ozgur Vatansever) in a 
controller using "auth.settings.login_form.session.linkedin"
e.g., auth.settings.login_form.session.linkedin.get_search(...)

this "auth.settings.login_form.session.linkedin" feels rather brittle. Is 
it? Is a better way to access the function get_search() ?



On Wednesday, 15 August 2012 17:05:58 UTC+1, Massimo Di Pierro wrote:
>
> or to
>
> redirect(URL('user', args='login'))
>
> or to
>
> redirect(URL('user/ogin'))
>
>
> On Wednesday, 15 August 2012 08:57:20 UTC-5, Carl wrote:
>>
>> Found this code very useful! Udi's time has saved me so much time.
>>
>> One minor change I made was to user() function in default.py.
>> The redirect() calls parameters:
>>
>> change 
>> redirect(URL('user', 'login')) 
>> to
>> redirect(URL(f='user', args=['login',]))
>>
>>
>>
>>
>> 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'
>>>
>>>
>>>

-- 



Reply via email to