def vkontakte_authorized(): next_url = request.args.get('next') or url_for('index.index') if request.args.get('code'): token = vkontakte.get_token(code=request.args.get('code')) session['access_token'] = token.get('access_token') if not token.get('email'): return redirect(url_for('error.error', error='Помилка при логуванні. ' 'Можливо ви не підтвердили вашу електронну адресу в vkontakte ' 'або заборонили доступ до вашої електронної адреси в ' 'налаштуваннях. Спробуйте залогуватися через іншу систему')) else: user = db_query(User, email=token.get('email')).first() if user is None: user_name = json.load(urllib.urlopen( "https://api.vk.com/method/users.get?v=5.8&access_token={access_token}".format( access_token=token.get('access_token'))))['response'][0] print(user_name) user_name = user_name.get('first_name') + ' ' + user_name.get('last_name') new_user = User(email=token.get('email'), registered_via='vkontakte', username=token.get('email'), shown_name=user_name, confirmed_at=datetime.datetime.utcnow(), active=True) g.db.add(new_user) g.db.commit() login_user(new_user) else: login_user(user) else: return redirect(url_for('error.error', error='Помилка при логуванні. Спробуйте ще раз, ' 'або спробуйте залогуватися через іншу систему')) session['login_via'] = 'vkontakte' return redirect(next_url)
def google_login(): try: flow = client.flow_from_clientsecrets(os.getcwd() + '/app-root/runtime/repo/client_secret.json', scope=['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'], redirect_uri='{host}/auth/google_login'.format(host=get_app_url())) except IOError as e: flow = client.flow_from_clientsecrets('client_secret.json', scope=['https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'], redirect_uri='{host}/auth/google_login'.format(host=get_app_url())) flow.params['access_type'] = 'online' if 'code' not in request.args: auth_uri = flow.step1_get_authorize_url() return redirect(auth_uri) else: auth_code = request.args.get('code') credentials = flow.step2_exchange(auth_code) user_data = json.load( urllib.urlopen('https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token={token}'.format( token=credentials.access_token))) session['credentials'] = credentials.to_json() if not user_data.get('email'): return redirect(url_for('error.error', error='Помилка при логуванні. ' 'Можливо ви не підтвердили вашу електронну адресу в vkontakte ' 'або заборонили доступ до вашої електронної адреси в ' 'налаштуваннях. Спробуйте залогуватися через іншу систему')) user = db_query(User, email=user_data.get('email')).first() if user is None: new_user = User(email=user_data.get('email'), registered_via='google', username=user_data.get('email'), shown_name=user_data.get('name'), confirmed_at=datetime.datetime.utcnow(), active=True, google_id=user_data['id']) g.db.add(new_user) login_user(new_user) g.db.commit() else: if not user.google_id: user.google_id = user_data['id'] login_user(user) g.db.commit() session['login_via'] = 'google' return redirect(url_for('index.index'))
def facebook_authorized(resp): next_url = request.args.get('next') or url_for('index.index') if resp is None: return redirect(url_for('error.error', error='Помилка при логуванні, попробуйте ще раз')) session['oauth_token'] = (resp['access_token'], '') user_data = facebook.get('me?fields=id,email,name').data user = db_query(User, email=user_data.get('email')).first() if user is None: new_user = User(email=user_data['email'], registered_via='facebook', username=user_data['email'], shown_name=user_data['name'], confirmed_at=datetime.datetime.utcnow(), active=True, facebook_id=user_data['id']) g.db.add(new_user) login_user(new_user) else: if not user.facebook_id: user.facebook_id=user_data['id'] login_user(user) g.db.commit() session['login_via'] = 'facebook' return redirect(next_url)
def login(): """ Prompt for username/email and password and sign the user in.""" user_manager = current_app.user_manager db_adapter = user_manager.db_adapter data = request.form next = request.args.get('next', _endpoint_url(user_manager.after_login_endpoint)) reg_next = request.args.get('reg_next', _endpoint_url(user_manager.after_register_endpoint)) # Immediately redirect already logged in users if _call_or_get(current_user.is_authenticated) and user_manager.auto_login_at_login: return redirect(next) user = None user_email = None # user = user_manager.find_user_by_username(data.get('user_name')) user = db_query(User).filter(or_(User.email == data.get('user_name'), User.username == data.get('user_name'))).first() if not user: return ajax_response(message="Ви ввели невірний логін або пароль") else: if user.password: if not verify_password(user_manager, data.get('password'), user.password): user = None return ajax_response(message="Ви ввели невірний логін або пароль") else: return ajax_response(message="Ви ввели невірний логін або пароль") user_email = None session['login_via'] = request.host remember_me = True if data.get('remember_me') else False if user and db_adapter.UserEmailClass: user_email = db_adapter.find_first_object(db_adapter.UserEmailClass, user_id=int(user.get_id()), is_primary=True, ) if not user and user_manager.enable_email: user, user_email = user_manager.find_user_by_email(data.get('user_name')) if user: _do_login_user(user, request.referrer, remember_me=remember_me) return ajax_response(message="Ви були успішно залоговані", reload_page = True)