我正在我的网络应用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中遇到的错误是:
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标志不起作用????
答案 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')
,它就可以解决问题