def get_current_user(request): user_id = parse_cookie(request.cookies.get("google_user")) if user_id: logging.error("USER ID COOKIE DETECTED") # logging.error('::get_current_user:: returning user' + user_id) return User.query(User.google_id==user_id).get()
def get (self): logging.error('CALLBACK') error = self.request.get('error') if error: logging.error(error) self.abort(404) code = self.request.get('code') # auth_config_file=open(CLIENT_SECRETS) # auth_config = json.load(auth_config_file) # auth_config_file.close() #client_id, client_secret, scope = auth_config['google_web']['client_id'],auth_config['google_web']['client_secret'], auth_config['google_web']['scope'] #access_token_url= auth_config['google_web']['token_uri'] payload = { 'code': self.request.get('code'), 'client_id': config.GOOGLE_CLIENT_ID, 'client_secret': secrets.GOOGLE_CLIENT_SECRET, 'redirect_uri': self.redirect_url, 'grant_type': 'authorization_code' } # get access token from the request token # logging.error('uri for'+self.uri_for('ciao', _full=True)) resp = urlfetch.fetch( url=config.GOOGLE_TOKEN_URI, payload=urlencode(payload), method=urlfetch.POST, headers={'Content-Type': 'application/x-www-form-urlencoded'} ) # get user data using access token auth_info=json.loads(resp.content) logging.error('auth_info') logging.error(auth_info) url='https://www.googleapis.com/oauth2/v3/userinfo?{0}' target_url = url.format(urlencode({'access_token':auth_info['access_token']})) resp=urlfetch.fetch(target_url).content user_data = json.loads(resp) if 'id' not in user_data and 'sub' in user_data: user_data['id'] = user_data['sub'] logging.error("callback:USER data") logging.error(user_data) user= User.query(User.google_id==user_data['id']).fetch(1) logging.error("callback:USER from query") logging.error(user) if not user: logging.error("ADDING NEW USER") user = User( #key_name=str(user_data["id"]), google_id=str(user_data["id"]), id=str(user_data["id"]), full_name=user_data["name"], google_access_token=auth_info['access_token'], email=user_data['email'], first_name= user_data['given_name'], last_name= user_data['family_name'], picture=user_data["picture"], google_locale = user_data["locale"], locale=user_data["locale"] ) user.put() set_cookie(self.response, "google_user", str(user_data["id"]), expires=time.time() + config.COOKIE_DURATION, encrypt=True) self.redirect('/')