2013-08-01 48 views
7

Có thể sử dụng Flask-Social và Flask-Security nếu tôi chỉ muốn sử dụng Đăng nhập Facebook, ví dụ như đăng ký người dùng và đăng nhập , tức là không có biểu mẫu đăng ký/đăng nhập cục bộ nào?Sử dụng Flask-Social với Nhà cung cấp Oauth Chỉ, Không có Mẫu đăng ký/Đăng nhập Địa phương

Tôi đã xem qua ứng dụng ví dụ Flask-Social và tài liệu nhưng không thể biết điều này là có thể. Trong ứng dụng ví dụ, người dùng không thể đăng nhập bằng Facebook trừ khi họ đã đăng ký trước đó. Sau khi đăng ký với ứng dụng mẫu, họ có thể liên kết tài khoản Facebook của họ với tài khoản cục bộ của họ.

Khi tôi cố gắng gọi social.facebook.get_connection() Tôi nhận được AttributeError 'AnonymousUser' object has no attribute 'id' vì không có current_user, được xác định bởi bảo mật bình sau khi đăng ký/đăng nhập.

+0

@theva bạn cần viết mã như trên trong dự án của mình. vui lòng xem https://github.com/mattupstate/flask-social-example/blob/master/app/__init__.py#L51 bạn sẽ biết vị trí đặt mã. BTW, mã trên phải thay đổi "db.commit()" thành "ds.commit()" – amos

Trả lời

4

Điều này có thể thực hiện được nếu không có quá nhiều công việc bổ sung bằng cách sử dụng trang trí @login_failed.connect_via. Với app như bạn thể hiện của một ứng dụng Flask, nó sẽ trông như

@login_failed.connect_via(app): 
def on_login_failed(sender, provider, oauth_response): 
    connection_values = get_connection_values_from_oauth_response(provider, oauth_response) 
    ds = current_app.security.datastore 
    user = ds.create_user(...) #fill in relevant stuff here 
    ds.commit() 
    connection_values['user_id'] = user.id 
    connect_handler(connection_values, provider) 
    login_user(user) 
    db.commit() 
    return render_template('success.html') 

Đối với điền vào những thứ có liên quan để tạo cho người sử dụng, tôi chỉ cần tạo một chuỗi ngẫu nhiên cho mật khẩu, và đã không có vấn đề để lại email rỗng. Tôi cũng chỉ đưa vào cùng một câu trả lời chính xác trên số Flask-Social github page.

+1

Tôi biết đây là một bài đăng cũ nhưng tôi không thể tìm thấy bất kỳ tài liệu nào cho trình đăng nhập @ login_failed.connect_via ... Đây có phải là một phần của Flask-xã hội hoặc Flask-bảo mật hoặc cái gì khác? – theva

+1

@theva đó là tín hiệu được kích hoạt tại đây: https://github.com/mattupstate/flask-social/blob/develop/flask_social/views.py#L192 – erik