烧瓶重定向混合内容错误,网址不是https

时间:2018-09-01 13:22:46

标签: javascript python redirect flask https

我正在开发Flask应用。我的一个视图包含动态创建的元素。为了收集值并将它们写入我的MongoDB数据库,我创建了一个JS脚本,该脚本遍历元素并将值提取到JS变量中。之后,我通过AJAX $。post()方法将它们发布到Flask后端。该部分正常工作,但是当到达 @app.route 函数的结尾时,当我尝试重定向到另一个登录页面时,出现以下错误:

  

混合内容:“ https://cocktail-recipe-book-gabyguedezh.c9users.io/get_add_cocktail_form”上的页面已通过HTTPS加载,但请求了不安全的XMLHttpRequest端点“ http://cocktail-recipe-book-gabyguedezh.c9users.io/get_my_recipes”。该请求已被阻止;内容必须通过HTTPS提供。

POST本身被执行,并且表单将文档发送到我的数据库,但是,重定向不会发生。

整个后端路由如下:

@app.route('/write_to_cocktail_database', methods=['POST'])
def write_to_cocktail_database():
    recipes = mongo.db.recipes

    recipes.insert_one(request.json)

    return redirect(url_for('get_my_recipes'))

以防万一,AJAX函数如下所示:

$.ajax({
    url: formUrl,
    // data: {'data': steps},
    data: JSON.stringify({recipe_name,  recipe_url, recipe_description,
                        recipe_image, is_vegan, ingredients, steps,
                        base_spirit, cocktail_type, flavour_profile,
                        author_name, recipe_rating, number_of_votes}, null, '\t'),
    type: 'POST',
    contentType: 'application/json;charset=UTF-8',
    success: function(response) {
        console.log('success');
    },
    error: function(error) {
        console.log('error', error);
    }
});

我尝试了以下操作:

针对特定视图的SSL,如HERE

我尝试在应用程序的开头(包括导入内容)复制该代码,然后使用@ssl_required下面的@app.route装饰器,如下所示:

@app.route('/write_to_cocktail_database', methods=['POST'])
@ssl_required
def write_to_cocktail_database():
    <rest of function>
    return redirect(url_for('get_my_recipes'))

get_my_recipes是我要重定向到的路由。这没用

我还尝试使用以下函数内部的replace方法来解决该问题:

if request.url.startswith('http://'):
        request.url = request.url.replace('http://', 'https://', 1)

这也不起作用,因为我不知道如何将修改后的URL馈送到重定向的url_for(并且简单地执行redirect(modified_url_as_string)也不起作用)。

现在,我知道get_my_recipes路由可以在其他重定向中使用,例如:

@app.route('/delete_cocktail/<recipe_id>')
def delete_cocktail(recipe_id):
    mongo.db.recipes.remove({'_id': ObjectId(recipe_id)})
    return redirect(url_for('get_my_recipes'))

以上内容,删除食谱并重定向到“我的食谱”页面。

我不确定为什么我编写的AJAX函数中的POST不能重定向我,但是常规HTML <form>上的POST确实起作用。

我也不确定如何从我发现的代码片段中使用装饰器(在上面的链接中),因为我只是在路由可行之前添加了装饰器。

我还尝试了其他解决方法,例如在window.location.href = "https://cocktail-recipe-book-gabyguedezh.c9users.io/get_my_recipes";这样的AJAX函数的成功部分上通过jQuery进行重定向(它还抱怨重定向不安全)。我尝试通过简单地执行render_template('my_recipes.html')来解决重定向问题,但这也没有起作用,似乎它必须是路由返回时的重定向。

我是Web开发和Flask的新手,所以我不确定如何使用在其他SO答案(例如this one)中找到的代码段,其中可接受的答案似乎是我放置的一般修饰符在我的所有路线之前,但会导致“重定向错误过多”,该错误已在注释中得到了解决,我不知道这是什么意思。

我一直在寻找可以使用的答案,但我感到沮丧,因为我发现大多数答案都假定您对Flask有所了解,并且大多数都没有提供有关如何使用代码的简洁示例(例如{{3 }}。

在这里我会非常感谢一些指导,我不知道该怎么做。

0 个答案:

没有答案