2015-07-06 22 views
13

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).

+0

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

+0

@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á. –

+0

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

Trả lời

1

Bạn đang lưu phiên làm việc trong trình duyệt ở đâu và như thế nào?

Xem xét phiên được lưu trữ trong cookie trình duyệt cho miền sản xuất example.com mà bạn cũng đã định cấu hình cục bộ (bằng cách thêm ghi đè vào tệp /etc/hosts).

Nếu máy chủ văn phòng của bạn được định cấu hình sử dụng tên miền phụ khác, ví dụ office.example.comREMEMBER_COOKIE_DOMAIN được đặt thành example.com, máy chủ văn phòng sẽ không thể đọc cookie. Khắc phục là sử dụng cookie tên miền chéo: REMEMBER_COOKIE_DOMAIN=.example.com (lưu ý dấu chấm trước).

Ref: https://flask-login.readthedocs.org/en/latest/#cookie-settings

1

Với phiên đến quản lý phiên ...

  • Bạn đang sử dụng một quản lý phiên client-based?
    • các vấn đề có thể xảy ra với cookie, ví dụ: cookie size, too much data in cookie
    • vấn đề có thể xảy ra với khóa bí mật của máy chủ, ví dụ: tạo khóa bí mật mới mỗi lần
  • Bạn có đang sử dụng quản lý phiên dựa trên máy chủ (ví dụ: flask-kvsession) không?
    • các sự cố có thể cố gắng truy cập cùng một chương trình phụ trợ như sản phẩm, ví dụ: tường lửa ngăn chặn truy cập đến một máy chủ redis

Có thể là bạn đang cố gắng để lưu trữ nhiều dữ liệu hơn phiên khi đánh máy chủ của bạn dev (ví dụ url máy chủ lâu hơn, dữ liệu gỡ lỗi, vv ...), mà có thể là một nỗi đau để đối phó với khi quản lý phiên được thực hiện trên máy khách.

Các vấn đề liên quan