2014-10-31 6 views
2

Flask-Security를 ​​사용하여 사용자를 관리하고 사용자가 스스로 로그인했지만 성공적으로 페이지를로드하면 보고서가 표시됩니다. 완전히 다른 사람으로 기록되었습니다. 내가 어디로 잘못 가고 있는지 모르겠습니다. 이것이 일어날 수있는 가능한 방법은 무엇입니까?사용자가 다른 사용자로 로그인 한 것처럼 보입니다

나는 간단한 사용자 관리를 위해 UserService 사용자입니다. 모든 요청 전에 사용자 서비스를 인스턴스화하고 current_user를 전달합니다. 그런 다음

 

@app.before_request 
def load_request_services(): 
    g.user_service = UserService(user_datastore, application_service, email_service, ORGS, current_user) 

, 나는이 방법에서 UserService에서 현재 사용자를 얻을 :이 API 요청 코드가 실행될 때

 

def current_user_get_info(self): 
    return { 
     'user': self.current_user.email, 
     'first_name': self.current_user.first_name, 
     'last_name': self.current_user.last_name, 
     'phone_number': self.current_user.phone_number, 
} 

가 호출 :

 
    class CurrentUser(restful.Resource): 
    def get(self): 
     return json_response(g.user_service.current_user_get_info()) 
+1

세션을 가지고 놀아 본 적이 있습니까? 'session [ "userid"]'는 Flask-Login/Security가 현재 사용자를 찾습니다 ([source] (https://github.com/maxcountryman/flask-login/blob/master/flask_login.py#L333-L347).)). 그래서 거기에서부터 시작할 가치가있을 것입니다. 그리고 여러분이 만든 코드로 나아가는 길을 찾으십시오. – Doobeh

+0

나는 세션을 가지고 놀지 않는다. 그러나 내가 할 일은 login_user를 호출하고 새로운 로그인을 시행하지 않을 때 remember_me = True로 설정됩니다. 그러나 업데이트를 할 때마다 수시로 앱을 재배포합니다. 이게 회의를 망칠까요? 재배포 후 사용자가 사이트로 돌아 오면 모든 세션이 명확 해 집니까? 나는 앱이 세션 정보를 어딘가에 저장한다고 가정하고, 재배포 후에 아마도 사라질 것이다. 그러나 재배포 후 다시 로그인 할 필요는 없습니다. – vik

+0

'app.secret_key'는 세션에 서명하는 데 사용되므로 재배포간에 동일하게 유지되면 세션은 여전히 ​​유효합니다. – Doobeh

답변

1

나는이 문제를 발견하고 같은 문제가있는 다른 사람들을 위해 여기에 올리고 있습니다.

내 사이트에 액세스하는 사용자가 프록시가있는 VPN 뒤에 있었던 것으로 나타났습니다. 프록시가 사용자의 쿠키와 함께 페이지를 캐싱하고있었습니다. 한 사용자가 요청하면 프록시는 헤더에 해당 사용자의 쿠키와 함께 페이지를 캐시합니다. 다음 사용자의 요청에서 프록시는 첫 번째 사용자의 쿠키로 페이지를 다시 제공하므로 두 번째 사용자는 다른 사람으로 자신을 찾습니다.

더 많은 정보를 원하시면 여기를 참조하십시오 : 프록시를 캐시하지 않도록 https://code.google.com/p/doctype-mirror/wiki/ArticleHttpCaching

나는 '개인'에 Cache-Control HTTP 헤더를 설정하여 그것을 해결. Flask에서 다음과 같이 보입니다 :

@app.after_request 
def add_header(response): 
    response.cache_control.private = True 
    response.cache_control.public = False 
    return response 
관련 문제