You have to run web2py from source and run 

pip install oath2

On Saturday, 11 July 2015 08:24:03 UTC-5, Do-Yang Kim wrote:
>
> Hi. I'm a newbie trying web2py. I get this error when I try above code
>
>
> *Cannot import module 'applications.admin.modules.oauth2'*
>
> I'm assuming that I don't have oauth2 library set up in the module 
> section. How can I fix this?
>
> On Thursday, April 9, 2015 at 7:30:46 AM UTC-5, piero crisci wrote:
>>
>> First of all you need to get the *google_auth.json file to use OAuth*
>> To get that you need to register your Google account as a webdeveloper
>> You can find how get the information on Google :)
>>  
>> Then u can change ur auth table  in this way
>>  
>> In the model.py
>>  
>> from gluon.tools import Auth, Crud, Service, PluginManager, prettydate
>> auth = Auth(db,secure=True)
>> crud, service, plugins = Crud(db), Service(), PluginManager()
>> ## ------------TABELLE USER ------------------- ##
>> ## create all tables needed by auth if not custom tables
>> auth.settings.extra_fields['auth_user']= [
>>   Field('phone', type='string', label='Telefono'),
>>   Field('country',type='string', label='Nazione'),
>>   Field('city',type='string', label='Città'),
>>   Field('address',type='string', label='Indirizzo'),
>>   Field('auth_login', type='string', default='basic', label='Tipo 
>> Login',readable=False, writable=False),
>>   Field('url_img', requires=IS_EMPTY_OR(IS_URL()), label='Link Immagine 
>> Profile',readable=False, writable=False),
>>   Field('nickname',  type='string', label='Nickname'),
>>   Field('birthdate',  type='date', label='Data Di nascita'),
>>   Field('gender', type = 'string', label='Genere' ,requires = 
>> IS_IN_SET(['M','F']), default = 'M'),
>>   Field('facebook_id', type='string', label='Username di 
>> Facebook',readable=False, writable=False),
>>   Field('twitter_id',  type='string', label='Username di 
>> Twitter',readable=False, writable=False),
>>   Field('google_id',  type='string', label='Username di 
>> Google',readable=False, writable=False ),
>>   Field('linkedin_id',  type='string', label='Username di 
>> Linkedin',readable=False, writable=False),
>>   ]
>> auth.define_tables(username=False, signature=True)
>>  
>> *In The Controller*
>>  
>> Import AccountAccess
>> def google():
>>     if auth.is_logged_in():
>>         redirect(URL(r=request, c='default', f='index'))
>>     folder = request.folder
>>     google_access = AccountAccess.GoogleAccount(folder)
>>     auth.settings.login_form=google_access
>>  
>>     return auth.login(next=URL(r=request, c='default', f='index'))
>>  
>>  
>> In the Module section
>> Create the *AccountAccess* module
>>
>> import oauth2 as oauth
>> from gluon.contrib.login_methods.oauth10a_account import OAuthAccount as 
>> OAuthAccount10a
>> from gluon.contrib.login_methods.oauth20_account import OAuthAccount
>> from oauthtwitter_account import OAuthAccount as OauthAccountTwitter
>> import os
>> import storage
>> import urllib2
>> from oauth2 import Client, Consumer, Token
>>
>> class GoogleAccount(OAuthAccount):
>>     "OAuth 2.0 for Google"
>>     def __init__(self,db,session,request,response,folder):
>>         with open(os.path.join(folder, *'private/google_auth.json'*), 
>> 'rb') as f:
>>             gai = storage.Storage(json.load(f)['web'])
>>         self.db = db
>>         self.request = request
>>         self.response = response
>>         self.session = session
>>         g = dict(
>>                 request=request,
>>                 response=response,
>>                 session=session,
>>                 )
>>         OAuthAccount.__init__(self,g, gai.client_id, gai.client_secret,
>>                               gai.auth_uri, gai.token_uri,
>>                               scope='
>> https://www.googleapis.com/auth/userinfo.profile 
>> https://www.googleapis.com/auth/userinfo.email 
>> https://www.googleapis.com/auth/plus.login',
>>                               approval_prompt='auto',
>>                               access_type = 'offline',
>>                               state="auth_provider=google")
>>     def get_user(self):
>>         token = self.accessToken()
>>         if not token:
>>             return None
>>         uinfo_url = '
>> https://www.googleapis.com/oauth2/v1/userinfo?access_token=%s' % 
>> urllib2.quote(token, safe='')
>>         uinfo = None
>>         try:
>>             uinfo_stream = urllib2.urlopen(uinfo_url)
>>         except:
>>             session.token = None
>>             return None
>>         data = uinfo_stream.read()
>>         uinfo = json.loads(data)
>>         username = uinfo['id']
>>         if uinfo:
>>             gender = 'M'
>>             if uinfo['gender'][0].lower() == 'f':
>>                 gender = 'F'
>>             existent = self.db(self.db.auth_user.email == 
>> uinfo["email"]).select(self.db.auth_user.id
>> ,self.db.auth_user.auth_login).first()
>>             if existent:
>>                 if existent.auth_login <> 'Google':
>>                     diz_account = dict(
>>                          username = uinfo['email'],
>>                          gender = gender,
>>                          auth_login = 'Google',
>>                          url_img = uinfo.get('picture', ''),
>>                          google_id = uinfo['id'],
>>                          registration_id = uinfo['id']
>>                     )
>>                     existent.update_record(**diz_account)
>>                 return dict(first_name = uinfo.get('given_name', 
>> uinfo["name"].split()[0]),
>>                             last_name = uinfo.get('family_name', 
>> uinfo["name"].split()[-1]),
>>                             username = uinfo['email'],
>>                             email = uinfo['email'],
>>                             gender = gender,
>>                             auth_login = 'Google',
>>                             birthdate = uinfo.get('birthday', ''),
>>                             url_img = uinfo.get('picture', ''),
>>                             google_id = uinfo['id'],
>>                             registration_id = uinfo['id']
>>                             )
>>             else:
>> #                self.db.auth.send_welcome_email(user)
>>                 return dict(first_name = uinfo.get('given_name', 
>> uinfo["name"].split()[0]),
>>                             last_name = uinfo.get('family_name', 
>> uinfo["name"].split()[-1]),
>>                             username = uinfo['email'],
>>                             email = uinfo['email'],
>>                             gender = gender,
>>                             auth_login = 'Google',
>>                             birthdate = uinfo.get('birthday', ''),
>>                             url_img = uinfo.get('picture', ''),
>>                             google_id = uinfo['id'],
>>                             registration_id = uinfo['id']
>>                             )
>>     def call_api(self):
>>         api_return = urllib.urlopen("
>> https://www.googleapis.com/oauth2/v1/userinfo?access_token=%s"; % 
>> self.accessToken())
>>         user = json.loads(api_return.read())
>>         if user:
>>             return user
>>         else:
>>             session.token = None
>>             return None
>>  
>>  
>> It worked for me 
>>  
>>
>> Il giorno martedì 7 aprile 2015 16:01:22 UTC+2, Moiz Nagpurwala ha 
>> scritto:
>>
>>> Hello,
>>>
>>> Still waiting for a working example of OAuth2 with Google.
>>>
>>> It is very crucial for my application to integrate Google authentication 
>>> in order to succeed.
>>>
>>> Hope this great community won't let me down.
>>>
>>> Thanks and regards.
>>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to