Tôi có một ứng dụng bình, và tôi sử dụng bình đăng nhập, hướng dẫn sau đây (không có gì lạ mắt ở đây)Flask-Login: Không hoạt động trên máy tính cục bộ nhưng tốt trên lưu trữ
- hoạt động tốt trên lưu trữ
- hoạt động tốt trên máy tính MAC cục bộ của tôi (ở nhà)
- không hoạt động trên máy tính Linux cục bộ của tôi (tại văn phòng, có thể là tường lửa, nhưng tôi có thể chuyển tiếp cổng và kết nối với cơ sở dữ liệu)
.
from flask.ext.login import LoginManager
login_manager = LoginManager()
login_manager.session_protection = "strong"
login_manager.init_app(app)
login_manager.login_view = 'login'
def login():
error = None
form = LoginForm()
if request.method == 'POST':
user = db.users.find_one({"username": form.username.data})
pass_hash = generate_password_hash(form.password.data)
if user and User.validate_login(pass_hash, user['password']):
user_obj = User(user['username'])
session['logged_in'] = True
login_user(user_obj,remember=True)
flash("Logged in successfully", category='success')
print 'logged in: OK'
#return redirect(request.args.get("next") or url_for("index"))
return redirect(url_for("index"))
error = 'Invalid credentials'
return render_template('login.html', title='login', **locals())
tốt, khi tôi nhập sai mật khẩu, nó cung cấp lỗi "Thông tin đăng nhập không hợp lệ". Khi tôi nhập mật khẩu chính xác, tôi không thấy "Đã đăng nhập thành công" flash, nhưng trên bảng điều khiển, tôi thấy "đã đăng nhập OK". Vì vậy, không có vấn đề với kết nối DB. Tuy nhiên, tôi không đăng nhập. Ví dụ:
g.user.is_authenticated()
cung cấp sai trong mẫu (điều này chỉ xảy ra trên Linux cục bộ của tôi và MAC đăng nhập thành công).
Có vẻ như bạn đang sử dụng mongodb (nhưng tôi có thể sai). Bạn có thể thêm lệnh in để in người dùng và pass_hash trước dòng này nếu người dùng và User.validate_login (pass_hash, user ['password']): hay sử dụng trình gỡ rối python để kiểm tra xem cơ sở dữ liệu có cung cấp cho bạn những gì bạn mong đợi không! – skippy
@skippy vâng tôi nhận được tất cả chúng một cách chính xác, tôi nhận được đối tượng người dùng một cách chính xác quá. –
Hmmm, vì vậy hãy xem mã của bạn, nếu bạn có thể vượt qua dấu kiểm "nếu người dùng và User.validate_login (pass_hash, user ['password']):", bạn sẽ có thể thấy "Đã đăng nhập thành công". Vì vậy, nếu bạn có thể nhận được các đối tượng của bạn một cách chính xác như mong đợi từ db của bạn, thì bạn đang thất bại trên "mệnh đề if" của bạn. Để được chính xác bạn đang thất bại trên kiểm tra này "User.validate_login (pass_hash, người dùng ['mật khẩu'])". Bạn có thể bước vào mã này và xác minh xem nó có trả về Sai không? – skippy