2016-10-08 1 views
1

플라스크 웹 애플리케이션이 있습니다. 나는 python-social-auth를 통합하려고 노력한다.python-social-auth : AttributeError : 'SQLAlchemy'객체에 'query'속성이 없습니다./complete/vk-oauth2 url

나는 설정 : AttributeError: 'SQLAlchemy' object has no attribute 'query'

역 추적 :

SOCIAL_AUTH_USER_MODEL = 'app.models.User' 
SOCIAL_AUTH_AUTHENTICATION_BACKENDS = (
    'social.backends.vk.VKOAuth2', 
) 
SOCIAL_AUTH_VK_OAUTH2_KEY = '***' 
SOCIAL_AUTH_VK_OAUTH2_SECRET = '***' 
SOCIAL_AUTH_VK_OAUTH2_SCOPE = [] 

가 나는 오류 /complete/vk-oauth2/?redirect_state=123ewq&code=123&state=123qwe에 리디렉션을 성공적으로 VK에서 승인 된 후 (vk.com)의 URL /login/vk-oauth2로 이동하면

Traceback (most recent call last): 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "my_app/env/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "my_app/env/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise 
    raise value 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "my_app/env/lib/python3.4/site-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "my_app/env/lib/python3.4/site-packages/social/apps/flask_app/utils.py", line 46, in wrapper 
    return func(backend, *args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/apps/flask_app/routes.py", line 23, in complete 
    *args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/actions.py", line 44, in do_complete 
    user = backend.complete(user=user, *args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/backends/base.py", line 41, in complete 
    return self.auth_complete(*args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/utils.py", line 246, in wrapper 
    return func(*args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/backends/oauth.py", line 397, in auth_complete 
    *args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/utils.py", line 246, in wrapper 
    return func(*args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/backends/oauth.py", line 408, in do_auth 
    return self.strategy.authenticate(*args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/strategies/base.py", line 150, in authenticate 
    return backend.authenticate(*args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/backends/base.py", line 82, in authenticate 
    return self.pipeline(pipeline, *args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/backends/base.py", line 85, in pipeline 
    out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs) 
    File "my_app/env/lib/python3.4/site-packages/social/backends/base.py", line 112, in run_pipeline 
    result = func(*args, **out) or {} 
    File "my_app/env/lib/python3.4/site-packages/social/pipeline/social_auth.py", line 20, in social_user 
    social = backend.strategy.storage.user.get_social_auth(provider, uid) 
    File "my_app/env/lib/python3.4/site-packages/social/storage/sqlalchemy_orm.py", line 141, in get_social_auth 
    return cls._query().filter_by(provider=provider, 
    File "my_app/env/lib/python3.4/site-packages/social/storage/sqlalchemy_orm.py", line 39, in _query 
    return cls._session().query(cls) 
AttributeError: 'SQLAlchemy' object has no attribute 'query' 

내 사용자 모델

from app import app 
from flask_sqlalchemy import SQLAlchemy 

db = SQLAlchemy(app) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(100), nullable=False) 
    email = db.Column(db.String(100), nullable=True) 
    provider = db.Column(db.String(50)) 
    social_id = db.Column(db.Integer) 
    created_at = db.Column(db.DateTime, server_default=func.now(), nullable=False) 

    @property 
    def is_active(self): 
     return True 

    @property 
    def is_authenticated(self): 
     return True 

    @property 
    def is_anonymous(self): 
     return False 

    def get_id(self): 
     return str(self.id) 

사용 패키지 : 내가 잘못 뭐하는 거지

$ pip freeze 
alembic==0.8.6 
defusedxml==0.4.1 
Flask==0.10.1 
Flask-Cors==2.1.2 
Flask-Fixtures==0.3.3 
Flask-Login==0.3.2 
Flask-Migrate==1.8.0 
Flask-Script==2.0.5 
Flask-SQLAlchemy==2.1 
itsdangerous==0.24 
Jinja2==2.8 
Mako==1.0.4 
MarkupSafe==0.23 
oauthlib==2.0.0 
psycopg2==2.6.1 
PyJWT==1.4.2 
python-editor==1.0 
python-social-auth==0.2.21 
python3-openid==3.0.10 
requests==2.10.0 
requests-oauthlib==0.7.0 
six==1.10.0 
SQLAlchemy==1.0.13 
Werkzeug==0.11.9 

? 아니면 내가 뭘 했지?

답변

1

문서에 설명 된대로 init_app 기능을 사용하고 있습니까? http://psa.matiasaguirre.net/docs/configuration/flask.html#models-setup

이 섹션은 올바르지 않으며 데이터베이스에 대한 참조가 아닌 init_app 함수에 SQLAlchemy 세션을 전달해야한다고 설명합니다. 나는이 문제를 해결하기 위해 PR을 제출 한

init_app(app, db.session)

:

그것은 무언가 같이해야합니다. https://github.com/omab/python-social-auth/pull/1050

+0

감사합니다. 너 내가 도와 줬어. 'init_social (app, db.session)'을 추가하고 그 오류가 수정되었습니다. 하지만 이제는 새로운 문제가 생겼습니다 :'sqlalchemy.exc.ProgrammingError : (psycopg2.ProgrammingError) relation "social_auth_usersocialauth"does not exist'. DB 테이블 "social_auth_usersocialauth"가 없습니다. Python-social-auth에는 Flask의 마이그레이션이 있습니까? – Meatbot

+1

@Meatbot 다음은 SQLAlchemy 모델입니다. https://github.com/omab/python-social-auth/blob/master/social/storage/sqlalchemy_orm.py – duffn