Thank you. I got the code to compile by running web2py from source but the
suggested code above did not exactly work. I found a working solution from
stackoverflow.
http://stackoverflow.com/questions/30072099/the-correct-way-to-implement-login-with-google-account
On Sunday, July 12, 2015 at 4:15:07 AM UTC-5, Massimo Di Pierro wrote:
>
> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.