Flask неавторизованный обратный звонок - PullRequest
0 голосов
/ 12 июля 2020

Всякий раз, когда я выполняю успешный вход в систему после использования @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) 
...