2012-12-15 3 views
0

로그인 시스템을 구축 할 때 사용하는 Node.js 앱이 있습니다. 로그인 시스템이 작동하지만 '로그인 한 사용자 이름'이 표시되도록 수동으로 페이지를 새로 고쳐야합니다. 그것은 성공적으로 당신이 로그인을 작성해야/가입 필드에 기호를 숨 깁니다 여기 node.js - 로그인하면 사용자 이름이 표시되지 않습니다.

내 app.js의 코드입니다.

/** 
    * Application Configuration 
    */ 
app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.enable('jsonp callback'); 
    app.set('view engine', 'jade'); 
    app.set('view options', {layout : false}); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    secret : 'sessionsecret'  
    })); 
    app.use(express.methodOverride()); 
    app.use(express.static(__dirname + '/public')); 
    app.use(function(req, res, next){ 
    res.locals.session = req.session; 
    next(); 
    }); 
    app.use(app.router); 
}); 

그리고 여기 login.js의 일부가 내가 숨어 오전 로그인 양식.

if(username && password){ 
     $.post('/login', $(this).serialize(), function(response){ 
     if(response.retStatus === 'success'){ 
      $('#loginForm').hide(); 
      $('#signup-btn').hide(); 
      //$(location).attr('href', '/admin'); 
     }else if(response.retStatus === 'failure'){ 
      $('#signup-error-modal').modal('show'); 
     } 
     }); 
    } 
    }); 

그리고 마지막으로이 당신이 더 이상 코드를보고 싶어 알려줘 자동으로

if(session.user) 
     div#logoutsection.pull-right 
      a#logout-btn.btn.btn-info.pull-right.top-bar-form-button(href='/logout') Logout 
      p#loginprompt.pull-right.login-prompt #{session.user.username} 
      small logged In 
     else 
     a#signup-btn.btn.pull-right.top-bar-form-button(href='#signup-modal', data-toggle="modal") Sign Up 
     form.pull-right.form-horizontal.top-bar-form(method="post", id="loginForm") 
      input.input-small.top-bar-form-textbox(id="username", type="text", name="User", placeholder="Username") 
      input.input-small.top-bar-form-textbox(id="password", type="password", name="Password", placeholder="Password") 
      button.btn.btn-primary.top-bar-form-button(type="submit", value="Sign In") Sign In 

사용자 이름을 표시해야하는 뷰의 JADE/HTML 코드는, 나는 그것을 생각 여기 모두. 하지만 실제로 사용자 이름을 표시하기 위해 수동으로 새로 고쳐야하는 이유가 없습니다. 어떤 아이디어가 환영합니까?

답변

1

세션에 jade/html 파일의 사용자가있는 경우 사용자 이름이 표시 되더라도 문제가 있습니다. Ajax 응답으로 자동으로 업데이트되지 않습니다. 대신 당신이해야 할 일은 아약스 성공 함수 내에서 html을 업데이트하는 것이다. 단락 요소가에 추가하기 전에 DOM에 존재해야

if(username && password){ 
     $.post('/login', $(this).serialize(), function(response){ 
     if(response.retStatus === 'success'){ 
      $('#loginForm').hide(); 
      $('#signup-btn').hide(); 
      // Add the name of the user to the html here! 
      // Edit: If you don't want to send the username from node.js 
      $("p#loginprompt").html(username); 
     }else if(response.retStatus === 'failure'){ 
      $('#signup-error-modal').modal('show'); 
     } 
     }); 
    } 

참고 : 당신의 login.js 파일에 다음과 유사한 뭔가

. 그리고 사용자 이름은 서버에서 응답시 보내야하며 교차 사이트 스크립팅 공격을 피하려면 위생 처리되어야합니다.

프로그래밍 방식으로 페이지를 새로 고치는 것 이외의 사용자 친화적 인 방법이 아닙니다. 그러나 제발 이런 식으로하지 마십시오.

+0

답장을 보내 주셔서 감사합니다. 사용자 이름을'p # loginprompt'에 보내고이 줄을 추가했는데 수동으로 새로 고침해야합니다.'.html (response.username)'이 내 케이스에 맞지 않을 수도 있습니다. – germainelol

+0

죄송 합니다만 DOM을 따르지 않고 교차 사이트 스크립팅 공격을 피합니다. – germainelol

+0

Node.js의 응답에 사용자 이름을 추가해야하기 때문에 작동하지 않습니다. 그러나 서버 측에서 코드를 수정하고 싶지 않다면 항상 다음을 할 수 있습니다 : '$ ("p # loginprompt") html (사용자 이름); DOM을 사용하면 단락 요소를 수정하고 싶다면,이 경우'p # loginprompt'는 사용자 이름을 보내기 전에 이미 만들어져 있어야합니다. – ElHacker

관련 문제