2015-01-22 4 views
4

나는 Passport 인증 내 간단한 익스프레스 응용 프로그램에서 설정이 있고 그것을 잘 작동하고, 나는 이런 식으로 내 인덱스 페이지에 req.user를 표시 있습니다클라이언트 쪽 javascript에서 Passport의 req.user 변수에 어떻게 액세스합니까?

<% if (!isAuthenticated) { %> 
    <a id="signIn" href="/login">Sign In</a> 
<% } else { %> 
    <h3 id="welcomeMsg"><%=user.id%></h3> 
    <h2 id="userBalance"><%=user.balance%></h2> 
    <a href="/logout">Log Out</a> 
<% } %> 

하는 index.js에서 :

app.get('/', function(req, res){ 
    res.render('index', { 
    isAuthenticated: req.isAuthenticated(), 
    user: req.user 
}); 

});

내가하고 싶은 일은 내 공개 디렉토리의 클라이언트 측 js 파일에 로그인 한 사용자의 사용자 이름을 확인하는 것입니다. 그 파일에서 그 변수를 사용 가능하게하는 가장 단순하고 가장 직접적인 방법은 무엇입니까?

app.get('/api/user_data', function(req, res) { 

      if (req.user === undefined) { 
       // The user is not logged in 
       res.json({}); 
      } else { 
       res.json({ 
        username: req.user 
       }); 
      } 
     }); 

과 :

+0

? 클라이언트 JS에 직접 노출해야합니다. 맞습니까? 이름이 지정된 object/module/etc에 넣으십시오. –

+0

내 index.js의 객체에이 객체를 저장해야하며 클라이언트 측 js 파일에서 사용할 수 있다고 말하고 계십니까? 나는 여러 가지 일을 시도했지만 항상 정의되지 않은 것을 보여 주며 문제가없는 html로 ejs로 인쇄 할 수있는 이유를 정확히 이해하지 못합니다. – user3473543

+0

아니요, 클라이언트와 서버가 서로 다른 프로세스라는 것을 의미하지는 않습니다. 클라이언트 측에서 액세스 할 JS를 렌더링해야한다. 개인적으로 나는 당신이 이미 알고있는 데이터를 얻기 위해 추가적인 http 호출을하는 것을 선호 할 것입니다. –

답변

9

passport.js 쿠키를 사용하여 세션을 mantains 때문에, 당신은 JSON 형식으로 현재 로그인 한 사용자 데이터를 제공하는 응용 프로그램에서 간단한 경로를 추가 할 수 있습니다 감사 jQuery.getJSON() 또는 json 콘텐츠를 요청할 수있는 다른 방법을 사용하여 클라이언트 측 자바 스크립트로 액세스하십시오. jQuery.getJSON()

예 : 당신은 지금 무엇을 잘못 무엇

$.getJSON("api/user_data", function(data) { 
    // Make sure the data contains the username as expected before using it 
    if (data.hasOwnProperty('username')) { 
     console.log('Usrename: ' + data.username); 
    } 
}); 
+1

감사합니다 !!!!!!! – user3473543

관련 문제