2012-08-08 5 views
1

업데이트 - 2013년 7월 31일백본 + 마리오네트 + RequireJS + 세션 (인증)

그래서,이 해내 무슨 짓을했는지에 빠른 업데이 트를 제공합니다. 효과적으로 작동하려면 4 조각 (마리오 네트/백본 전용, 세션 요청에 응답하는 웹 서비스가 필요합니다)이 필요합니다. 나는 누군가를 볼 수있는 Gists를 만들었습니다. 요지를 자유롭게 업데이트하면 버그가없는 것으로 간주되어 코드를 가져올 것입니다.

필자는 jQuery, require.js, text require.js plugin, handlebars 및 moment.js를 사용합니다. main.js에는 런타임시 HTML에 포함하지 않고 템플릿에서 디스크 또는 캐시에서 템플릿을로드하기 위해 핸들 막대를 사용하고 템플리트에서 momentjs를 사용하도록 도우미를 제공하는 모든 후크가 포함됩니다. 질문이 있으시면 언제든지 게시하십시오.

기 스트 : https://gist.github.com/dkleehammer/6126639

업데이트!

나는 작동하는 해결책을 찾았다 고 생각합니다. 테스트를 계속하고 작성자에게 전달하여 검토하고 블로그에 추가하려고하는지 확인합니다. 백본과 인증과 관련하여 많은 질문을 보았습니다. 다른 사람들에게 도움이되기를 바랍니다.

원본 !!

서버 측 세션 처리 및 백본 + 마리오 네트에 문제가 있습니다. 나는이 애플리케이션을 기반으로하는 세션 모델을 가지고있다. 세션은 인증 된 플래그, 세션 ID, 사용자 ID 등과 같은 데이터를 전달합니다.

여러 가지 방법을 시도했지만 여전히 하나의 문제가 있습니다. 우리가 현재 세션 상태로 응답하기 위해 서버에서 기다리고 있고 라우터가 로그인 페이지로 보내야하는지 아니면 특정 영역에서 볼 필요가 있는지를 결정하려고하는 두 번째 타이밍 문제가 있습니다. 일단 인증이되면 (물론 로그인 후) 인덱스 해시 태그로 보내지 만, 페이지가 새로 고쳐지면 모델이 undefined로 반환되고 로그인 해시 태그로 돌아갑니다. 이것은 렌더링하는 동안 세션 모델 데이터를 사용하는 다른 것에 대한 문제입니다.

마리오 네트로 서버 측 세션 응용 프로그램을 수행하는 가장 좋은 방법은 무엇입니까? 누군가 백본 + 마리오네트와 함께 라우팅 및 서버 측 세션을 사용하는 좋은 예가 있습니까?

+0

@Brian의 솔루션 코드 – Brian

+2

을 살펴볼 수있는 코드 링크가 있으면 궁금합니다. github.com에서 요지를 작성했습니다. 작동 시키려면 몇 가지 사항을 설정해야하지만, 주로 세션 처리의 중요한 부분을 보는 것이 도움이됩니다. 주로 auth 모듈을 사용하여 세션 모델을 변경할 때까지 App.start()를 호출하지 않습니다. 궁금한 점이 있으면 알려주세요. – dkleehammer

답변

0

당신은 아약스 JQuery와 함수에 서버 덕분에 동기 요청과 비동기를 보낼 수 : 거짓 옵션 :

$.ajax 
    ({ 
    type: "GET", 
    url: "login.php", 
    dataType: 'json', 
    async: false, 
    data: '{"username": "' + username + '", "password" : "' + password + '"}', 
    success: function(){ 
     // go wherever you want... 
    }, 
    error: function(){ 
     // go to login page 
    } 
}); 
+0

기본 Backbone.sync를 사용하고 있으므로 세션 모델의 fetch 메소드를 fetch ({async : false})로 변경했지만 더 많은 문제가 발생했습니다. 모델이 준비되기 전에 'change : logged_in'이벤트가 더 이상 시작되지 않았거나 레이아웃이 이미 렌더링을 요청한 것처럼 동작했습니다. 아이디어를 주셔서 감사합니다. 세션 모델에 동기식 호출을 사용하여 다시 작성할 수 있는지 몇 가지 새로운 것을 시도했습니다. – dkleehammer

0

내가 세션 데이터를 인쇄하여이 문제를 해결 것을 (인증 플래그, 세션 ID , 사용자 ID 등)를 추가 ajax 쿼리를 수행하는 대신 페이지에 추가합니다.

window.userdata = { "이름": 마커스, "비밀번호" 'user_id를'12343} '등

그리고 당신은 당신의 스크립트에서 사용 후 그것을 제거합니다.

1

관심이있는 분들을 위해 최근 작업을 기반으로하는 백본 마리오네트를 사용하는 서버 측 세션 응용 프로그램의 실례를 생각해 냈습니다.https://github.com/michael-lee/loopback-example-backbone-marionette

이 예제 백엔드 인증 지원과 Node.js를 서버입니다 LoopBackJS하지만 로그인 REST API를 제공하고, 인증 토큰을 사용하여 데이터 액세스를 보호하는 다른 백엔드를 사용 설명서에

저장소는 예제를 실행하려면 괜찮을거야. 로그인 한 사용자가 없거나 토큰이 만료되면 HTTP 401 오류로 백엔드에 대한 요청이 실패합니다.

Marionette 앱은 로그인 응답에 반환 된 토큰을 저장하고 모든 토큰 요청에이 토큰을 보냅니다. jquery.cookie을 사용하여 토큰을 지속하므로 페이지 다시로드 및 브라우저 다시 시작시에도 유지됩니다. 앱이 시작되기 전에 먼저 유효한 토큰이 있는지 확인합니다. 그런 다음 앱과 라우터를 시작합니다. 유효한 토큰이 있으면 인증 된 페이지로 직접 이동합니다. 인증이 완료되면 언제든지 401 오류 (예 : 세션 만료)가 발생하면 $ .ajaxSetup을 사용하여 오류를 가로 채고 로그인 페이지로 다시 이동합니다.