2013-08-01 6 views
7

사용자 등록 및 로그인과 같이 Facebook 로그인을 사용하려는 경우 Flask-Social 및 Flask-Security를 ​​사용할 수 있습니까? 즉, 지역 등록/로그인 양식이 없습니까?Flask-Social을 Oauth 제공 업체에서만 사용, 로컬 등록/로그인 양식 없음

Flask-Social 예제 응용 프로그램과 설명서를 살펴 보았지만 가능한지 여부를 알 수 없었습니다. 예제 애플리케이션에서는 사용자가 이전에 등록하지 않은 한 Facebook에 로그인 할 수 없습니다. 예제 애플리케이션에 등록하면 Facebook 계정을 로컬 계정과 연결할 수 있습니다.

social.facebook.get_connection()을 호출하려고했을 때 AttributeError 'AnonymousUser' object has no attribute 'id'이 있습니다. current_user이 없기 때문에 등록/로그인 후 flask-security로 정의됩니다.

+0

@theva 프로젝트에 위와 같은 코드를 작성해야합니다. https://github.com/mattupstate/flask-social-example/blob/master/app/__init__.py#L51 코드 위치를 알 수 있습니다.를 참조하십시오. BTW, 위의 코드는 "db.commit()"을 "ds.commit()"으로 변경해야합니다. – amos

답변

4

이것은 장식자인 @login_failed.connect_via을 사용하면 너무 많은 추가 작업없이 수행 할 수 있습니다. 사용자를 만들기위한 관련 물건에 충전을 위해, 난 그냥 암호를 임의의 문자열을 생성하고, 문제가 떠나 없었 같이 플라스크 응용 프로그램의 인스턴스로 app, 그것은

@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') 

과 같을 것이다 이메일 null. 나는 또한 정확히 동일한 대답을 Flask-Social github page에 포함 시켰습니다.

+1

이 글은 오래된 게시물이지만 @ login_failed.connect_via 데코레이터에 대한 문서를 찾을 수 없습니다 ... 이것은 플라스크 사회 또는 플라스크 보안 또는 다른 것의 일부입니까? – theva

+1

@theva 여기에서 시작됩니다. https://github.com/mattupstate/flask-social/blob/develop/flask_social/views.py#L192 – erik