from flask import session
from functools import wraps
import flask
from flask import Flask, redirect, url_for, render_template, session
from flask_dance.contrib.google import make_google_blueprint, google
from flask_login import LoginManager, login_user , logout_user , current_user , login_required
from flask_session import Session
import time, dash, os, json, flask, configparser, shutil, base64, io
import pandas as pd
import numpy as np
from plotly.subplots import make_subplots
from dash_table import DataTable
import dash_html_components as html
import dash_core_components as dcc
import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output, State
import dash_daq as daq
import plotly.graph_objs as go
from dash.exceptions import PreventUpdate
import dash_table.FormatTemplate as FormatTemplate
from dash_table.Format import Format
from dash_extensions import Download
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
user = dict(session).get('profile', None)
# You would add a check here and usethe user id or something to fetch
# the other data for that user/check if they exist
if user:
return f(*args, **kwargs)
return render_template('index.html')
return decorated_function
# AS simeple as possbile flask google oAuth 2.0
from flask import Flask, redirect, url_for, session
from authlib.integrations.flask_client import OAuth
import os
from datetime import timedelta
#dotenv setup
from dotenv import load_dotenv
load_dotenv()
# App config
server = Flask(__name__)
server.secret_key = 'xxxx'
server.config['SESSION_COOKIE_NAME'] = 'google-login-session'
server.config['PERMANENT_SESSION_LIFETIME'] = timedelta(seconds=120)
# oAuth Setup
oauth = OAuth(server)
google = oauth.register(
name='google',
client_id='xxxx',
client_secret='xxxx',
access_token_url='https://accounts.google.com/o/oauth2/token',
access_token_params=None,
authorize_url='https://accounts.google.com/o/oauth2/auth',
authorize_params=None,
api_base_url='https://www.googleapis.com/oauth2/v1/',
userinfo_endpoint='https://openidconnect.googleapis.com/v1/userinfo', # This is only needed if using openId to fetch user info
client_kwargs={'scope': 'openid email profile'},
)
@server.route('/')
@login_required
def index():
email = dict(session)['profile']['email']
return render_template('index.html')
@server.route('/login')
def login():
google = oauth.create_client('google') # create the google oauth client
redirect_uri = url_for('authorize', _external=True)
return google.authorize_redirect(redirect_uri)
@server.route('/authorize')
def authorize():
google = oauth.create_client('google') # create the google oauth client
token = google.authorize_access_token() # Access token from google (needed to get user info)
resp = google.get('userinfo') # userinfo contains stuff u specificed in the scrope
user_info = resp.json()
user = oauth.google.userinfo() # uses openid endpoint to fetch user info
# Here you use the profile/user data that you got and query your database find/register the user
# and set ur own data in the session not the profile from google
session['profile'] = user_info
session.permanent = False # make the session permanant so it keeps existing after broweser gets closed
return redirect('/Planner/')
@server.route('/Planner/logout')
def logout():
for key in list(session.keys()):
session.pop(key)
return redirect('/')
app = dash.Dash(__name__, server = server,
url_base_pathname='/Planner/')
app.scripts.config.serve_locally = False
app.title = 'Scenario Planner'
app.layout = html.Div([html.Div('Hey'), html.Br(), html.A('Logout', href = './logout')])
if __name__ == "__main__":
server.run(debug=False)
这是我的密码。基本上,我的代码中也运行着一个plotly dash应用程序。除了限制对dash应用程序的访问之外,其他一切都正常。如果我使用localhost:5000/Planner,则无论身份验证如何,都会显示我的应用程序。
如果我遵循身份验证流程,登录,然后注销,然后单击退格,破折号应用程序仍然可以访问。有没有办法修改这段代码来限制这种访问。
使用之前的答案,在一定程度上解决了这个问题:在烧瓶应用程序中运行Dash应用程序,我想出了这个解决方案:
您可以将其添加到代码中:
@server.route('/plotly_dashboard')
@login_required
def render_dashboard():
return flask.redirect('/Planner')
它给出: 下面是我使用的代码: 方法verifyUserExistance是; 我就是这样处理注销的;
每当我单击登录页面中的“注册”按钮时,应用程序就会崩溃,无法移动到下一个活动。我已经在这个问题上纠缠了一天,似乎在任何地方都找不到解决办法。 下面是我为注册按钮方法编写的代码。(和是文本输入布局) Logcat在第7行显示错误,即ref.child(…行)。我尝试了第7行的替代方法,如:
我正在使用 jwt 令牌在我的 angular(客户端)和 Spring 引导(服务器)应用程序中对用户进行身份验证。我希望用户在令牌过期时自动注销应用程序。我使用拦截器的概念来检查令牌是否过期,并向用户显示一个弹出窗口,说“您的会话已过期”并注销应用程序,如下所示: 这工作正常,留下一个与弹出窗口相关的问题。我在向服务器发送登录请求时,也会在执行登录请求时弹出此会话过期的弹出窗口,作为拦截器拦截
如何修复此错误\Android\应用程序\src\debug\AndroidManifest.xml 调试控制台 D:\工作\实习生\代码\应用程序\kathana\android\app\src\debug\AndroidManifest.xml:27: 9-33:20错误:android:导出需要显式指定元素 失败:构建失败,出现异常。 哪里出错了:任务': app: process Debu
在我的Spring会话中,我使用了 redis 服务器。现在我正在使用 Angular 7。 这里代码1 2 3 4 > 点击注销按钮后,我的页面将重新加载,但注意happen.it将与上一页相同。 如果我把{headers:headers}放在返回的loginservice中。logout(),则会出现错误 (http.js:167),位于HttpHeaders.push../node_modu
问题内容: 在我的应用程序中,我使用jsapi实现了Google注销。 现在,我需要在我的应用程序中单击一个按钮的同时从Google登出该用户。如何使用JavaScript实现此功能,或者至少每次用户登录时它都必须询问Google登录页面。 我已经尝试过,但是似乎没有用。 问题答案: OAuth概述:他/她说的用户是他/她吗? 我不确定您是否使用OAuth来登录Stack Overflow,例如“