Токен петлевого доступа к колбе - PullRequest
5 голосов
/ 06 октября 2019

Я настроил петлевой API, и я планирую использовать имя входа, так как такая колба будет отправлять запросы на возврат, а петля возвращает accessToken

Например, вход в систему на приборной панели:

# Login route
@app.route("/login", methods=['GET', 'POST'])
def login():
    status = ""
    url_login = 'http://localhost:3000/api/Users/login'

    try:
        if request.method == 'POST':
            username = request.form['username']
            password =  request.form['password']


            payload_login = {
            "username": str(username),
            "password":str(password)
            }
            print(payload_login)


            r = requests.post(url_login, data=payload_login).text
            access_token = json.loads(r)

            # access_token = r['id']
            # access_token = json.loads(access_token)
            print("Access Token: " + str(access_token['id']))

            return redirect('/') #CHANGE TO 404 PAGE


    except Exception as e:
        print(e)
        return redirect('/') #CHANGE TO 404 PAGE

    return render_template('login.html')


@app.route('/dashboard', methods=['GET', 'POST'])
def logged_in_dashboard():


    return render_template('index.html')

Как мне настроить его так, чтобы при входе в приборную панель требовался accessToken из loopback? В прошлом я использовал app.config['ACCESS_KEY'] ='key' и установил, что если он содержит токен, он позволит пользователю войти в систему.

Но я не уверен, что это хорошая практика. Что-нибудь, что вы хотели бы порекомендовать, чтобы обрабатывать множество пользовательских логинов?

1 Ответ

3 голосов
/ 15 октября 2019

Не создавать запросы к API изнутри API. Чтобы разделить функциональность между конечными точками, используйте функции. Здесь необходимо как минимум две функции:

  1. функция возвращает токен для действительных учетных данных
  2. функция, которая требует наличия токена в сеансе или в заголовке запроса AuthorizationНапример,

Проверьте подход, с которым связан канал, для получения более подробной информации о реализации: Как реализовать аутентификацию токена во Flask?

Или официальный учебник покак реализовать сеансы: https://flask.palletsprojects.com/en/1.1.x/quickstart/#sessions

Который имеет что-то вроде этого:

@app.route('/')
def index():
    # this if is the login requirement
    if 'username' in session:
        return 'Logged in as %s' % escape(session['username'])
    return 'You are not logged in'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # Add logic for validating username and password here.
        # If credentials are ok, set username to session.
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form method="post">
            <p><input type=text name=username>
            <p><input type=submit value=Login>
        </form>
    '''
...