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.