PREFERRED_URL_SCHEME似乎在Jinja2 Flask Template中不起作用

时间:2016-06-14 06:47:11

标签: python flask jinja2 facebook-login

我正在我的网络应用www.glifft.com上实施FB登录,但我似乎无法正确重定向。登录后的重定向应该是https://www.glifft.com/myglifft。我在Jinja2模板中使用Flask中的url_for()函数来生成此URL。但我似乎无法在前面使用https生成。它始终生成为http。

这是我的JavaScript:

function getuserDetails(accessToken) {
   FB.api('/me',{ locale: 'en_US', fields: 'name, email' }, function(response) {
         $.ajax({
             url: "/register",
             type: "POST",
             data: {
                     name: response.name,
                     email: response.email,
                     login_provider : "Facebook",
                     access_token: accessToken
                 },

                 success: function(response) {
                     location.href = "{{ url_for('myglifft', _external=True) }}";
                     console.log(location.href)
                 },
                 error: function(response) {
                     alert("Please check your facebook privacy settings.");
                     console.log(response)
                 }
         });
     });

location.href函数不断解析为http://www.glifft.com。即使在我的配置中我也有

PREFERRED_URL_SCHEME = 'https'

我在chrome中遇到的错误是:

Chrome Console Error

Mixed Content: The page at 'https://www.glifft.com/login' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.glifft.com/myglifft'. This request has been blocked; the content must be served over HTTPS.

看起来这应该有效。为什么PREFERRED_URL_SCHEME标志不起作用????

2 个答案:

答案 0 :(得分:3)

PREFERRED_URL_SCHEME对我来说似乎也有问题。 如果您的url_for呼叫很少,则传递_scheme =' https'可以考虑。那么,这条线就是,

location.href = "{{ url_for('myglifft', _external=True, _scheme='https') }}";

答案 1 :(得分:0)

url_for尊重PREFERRED_URL_SCHEME 只有在您不在请求上下文中时,如果您在视图函数中,它将始终使用request.url

这是有人尝试修复文档: https://github.com/untitaker/flask/commit/b49074eb6b19d8f5fdb3301a6e50f11845dd530d

如果你添加url_for(view, _external=True, _scheme='https'),它就可以解决问题