Flask + Apache + https: проблема с необходимыми страницами входа в систему - PullRequest
0 голосов
/ 04 февраля 2019

У меня на сервере № 1 работает приложение-колба, доступное по адресу http://flasky.mydomain.com:5000, доступное только внутри сети нашей компании.Моя цель - создать публичный HTTPS-сайт https://foo.mydomain.com, который указывает на это приложение http: // flask.

На сервере № 2 у меня работает Apache, который указывает на этот адрес со следующей конфигурацией.

<VirtualHost *:443>
  ServerName foo.mydomain.com
  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
  SSLHonorCipherOrder on  
  SSLCipherSuite ...
  SSLCertificateFile /path/to/file
  SSLCertificateKeyFile /path/to/file
  SSLCertificateChainFile /path/to/file
  RewriteEngine On
  RewriteRule ^/(.*) http://flasky.mydomain.com:5000/$1 [P,L]
</VirtualHost>

В моем приложении для фляги есть такие страницы, как "/index.html", который доступен только для аутентифицированных пользователей, и "/register.html" и "/login.html", которые доступны для анонимных пользователей..

Вызов https://foo.mydomain.com/register.html работает нормально.

Вызов https://foo.mydomain.com/index.html, для которого требуется вошедший в систему пользователь перенаправляет на следующий URL (без httpS): http://foo.mydomain.com/login?next=%2Findex.html

Я не знаю, почему приложение перенаправляет на http: // URL вместо https: //.

Процесс входа в систему моего приложения фляги работает нормально, и я могу вызвать / index.html после успешного входа в систему, см. код ниже:

from flask_login import login_user, logout_user, current_user, login_required

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    email = request.form.get('email', '').strip()
    password = request.form.get('password', '')
    user = User.query.filter_by(email=email).first()
    if user is None or not user.check_password(password):
        err_msg = _('Login failed')        
        return render_template('login.html', err_msg=err_msg)    
    login_user(user)
    return render_template('index.html')

Защищенная страница /index.html защищена флагом @login_required в моем коде.

@app.route('/')
@app.route('/index.html')
@login_required
def index():
    return render_template('index.html')    

Любая идея,почему я не могу вызвать защищенную страницу "/index.html" даже после того, как язалогинен?Когда я звоню https://foo.mydomain.com/index.html после входа в систему, приложение автоматически перенаправляет на http://foo.mydomain.com/login?next=%2Findex.html.

...