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