gpt4 book ai didi

python - 使用 ajax 间歇性出现 Flask-Login 问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:23 25 4
gpt4 key购买 nike

我正在使用 Ajax 登录,使用 Flask-Login 扩展。这是我的服务器端代码:

@app.route('/login', methods=["POST"])
def login():
if current_user.is_authenticated:
redirect_url = url_for('index')
return jsonify(loggedIn=True, redirectUrl=redirect_url)

username = request.form.get('username', '').strip()
password = request.form.get('password', '').strip()
user = User.query.filter_by(username=username).first()
if user and util.encrypt_password(password, user.salt) == user.password:
logged_in_user = CurrentUser(user)
login_user(logged_in_user)
redirect_url = url_for('index')
return jsonify(loggedIn=True, redirectUrl=redirect_url)
else:
return jsonify(loggedIn=False, error='Invalid Email/Password')

和我的客户端代码:

(function(){
$login_form = $('#login_form');

//add validation to form
if( $login_form.length ){

$login_form.parsley()
$login_form.submit(function(e) {
var url = $(this).attr('action');
var data = $(this).serialize();

tryLogin(url, data);
return false;
});
}

function tryLogin(url, data){
var $submitBtn = $('#login_form__submit');

//notify user that we are working
$submitBtn.addClass('btn--loading');

$.ajax({
type: 'POST',
url: url,
data: data,
dataType: 'json',
success: function (data) {
if (data.loggedIn) {
mixpanel.track('login_success');
window.location.href = data.redirectUrl || '/';
}
}
});
}
});

不确定出了什么问题,我最近开始看到这个问题,而且它失败的次数超过 50%。如果失败,它只会重定向到新页面,但不存在 session 信息。所有内容都托管在同一域中。

编辑:更多信息:即使登录间歇性不起作用,后端也会传递登录信息,前端会收到 loggedIn=TrueredirectUrl。问题似乎出在客户端接收到 session /cookie 上,但不确定为什么会出现间歇性问题。

更新

现在所有人都在阅读这篇文章。我找不到好的解决方案。但是调试并意识到这肯定是由于 Chrome 中的一些错误从 Ajax 请求更新 cookie/ session 数据而发生的。我通过使用 redis 而不是客户端转移到服务器端 session 来解决这个问题。这确保请求始终具有正确的 session 信息。

最佳答案

默认情况下,Flask 中的 URL 路由器只响应 GET 方法。您正在使用 POST 方法在 AJAX 中发出请求。

看起来你的 View 函数应该同时处理 GETPOST (当登录用户访问此 URL 时,只需重定向到 index页面?)

所以你必须显式地将methods参数设置为@app.route,改变这一行

@app.route('/login')

到:

@app.route('/login', methods=['GET', 'POST'])

再试一次。

如果不成功,请评论,我会持续更新。

关于python - 使用 ajax 间歇性出现 Flask-Login 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com