Всякий раз, когда я выполняю успешный вход в систему после использования @login_requried для конечной точки / аутентификации, поток в порядке до этого момента. Если я снова нажму «/ auth» в браузере, это приведет меня к функции под @login_manager.unauthorized_handler. Могу ли я узнать почему?
В моем приложении есть одна кнопка на странице входа, и эта страница должна отображаться только тогда, когда пользователь не вошел в систему. Эта единственная кнопка снова перенаправляется на другой логин oauth (например, google / webex). Я хочу защитить все остальные страницы декоратором login_required. Когда я когда-либо повторно нажимаю URL-адрес после успешного входа в систему, появляется страница входа в систему, чего не должно быть.
app = Flask(__name__)
CORS(app)
sess = Session()
app.config.from_envvar("APP_CONFIG_FILE")
app.config['SECRET_KEY'] = "secret"
app.config['SESSION_PERMANENT'] = True
app.config['SESSION_TYPE'] = 'filesystem'
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=15)
app.config['USE_SESSION_FOR_NEXT'] = True
login_manager = LoginManager()
# login_manager.login_view = '.main_page'
login_manager.init_app(app)
sess.init_app(app)
@login_manager.unauthorized_handler
def unauthorized_callback():
# messages = json.dumps({"request_url":request.url})
session['request_url'] = request.url
return redirect(url_for('.main_page'))
@login_manager.request_loader
def load_user(request):
print("QUERY STRING = " ,request.url)
print(session)
if 'user' in session:
print("inside user")
user = session['user']
# session['state_url'] = request.url
print(user.is_authenticated)
return user
if "code" in request.args:
print("inside code")
# query_string = request.query_string
auth_code = request.args.get('code')
user = User(auth_code)
if auth_code:
# user.redirectURI = request.url
user.get_tokens()
print("access_token is: " ,user._access_token)
personID, emailID, displayName, orgId = user.get_oauthuser_info()
session['user'] = user
# session['state_url'] = request.url
login_user(user)
return user
return None
@app.route("/")
def main_page():
"""Main Grant page"""
# if 'state' in request.args:
# return render_template("index.html",state=request.args['state'])
# if 'next' in request.args:
# redirect(request.args.get('next'))
if 'request_url' in session:
query = session['request_url'].replace('http://localhost:6006',"http://733e6ad8e711.ngrok.io")
return render_template("index.html",redirect = urllib.parse.quote(query,encoding='UTF-8',safe=''))
else:
return render_template("index.html")
@app.route("/reroute")
@login_required
def re_route():
"""Main Grant page"""
return ("landed here xD with session by:" + str(session['user'].personID) + " from Org: "+str(session['user'].orgID))
@app.route("/auth") #Endpoint acting as Redirect URI.
@login_required
def auth():
return "Auth Page"
if __name__ == '__main__':
app.run(host="0.0.0.0",port=6006,debug=True)