2017-12-11 8 views
0

mysql 데이터베이스를 사용하여 express.js에서 로그인 및 등록 기능을 구현하고 있습니다. 내 가입 논리가 잘 작동하고 있습니다. 하지만 로그인이 작동하지 않습니다. 대신, Expressjs - 세션 변수에 정의되지 않은 'userId'속성을 설정할 수 없습니다.

TypeError: Cannot set property 'userId' of undefined and throw err; // Rethrow non-MySQL errors my routes/user.login code is as follows.

exports.login = function(req, res){ 
var message = ''; 
var sess = req.session; 

if(req.method == "POST"){ 
    var post = req.body; 
    var name= post.user_name; 
    var pass= post.password; 

    var sql="SELECT id, first_name, last_name, user_name FROM `users` WHERE `user_name`='"+name+"' and password = '"+pass+"'"; 
    db.query(sql, function(err, results){ 
    if(results.length){ 
     req.session.userId = results[0].id; 
     req.session.user = results[0]; 
     console.log(results[0].id); 
     res.redirect('/home/dashboard'); 
    } 
    else{ 
     message = 'Wrong Credentials.'; 
     res.render('index.ejs',{message: message}); 
    } 

    }); 
    }else { 
     res.render('index.ejs',{message: message}); 
} 
}; 

을 오류가 발생하고 다음과 같이 내 login.ejs 파일입니다.

<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Sample Site</title> 

    <link rel="stylesheet"href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"/> 

</head> 
<body id="clrblk"> 
    <div class="container"> 
    <div id="loginbox" style="margin-top:50px;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2"> 
     <div class="panel panel-info" > 
       <div class="panel-heading"> 
        <div class="panel-title">Sign In</div> 
        <!--<div style="float:right; font-size: 80%; position: relative; top:-10px"><a href="#">Forgot password?</a></div>--> 
       </div> 

       <div style="padding-top:30px" class="panel-body" > 
                    <% if (message.length > 0) { %> 
                       <div class="alert alert-danger col-sm-12"><%= message %></div> 
                    <% } %> 

        <form id="loginform" class="form-horizontal" role="form" method="post" action="/login"> 

         <div style="margin-bottom: 25px" class="input-group"> 
            <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
            <input id="login-username" type="text" class="form-control" name="user_name" value="" placeholder="username"> 
           </div> 

         <div style="margin-bottom: 25px" class="input-group"> 
            <span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span> 
            <input id="login-password" type="password" class="form-control" name="password" placeholder="password"> 
           </div> 



         <div class="input-group"> 
            <!--<div class="checkbox"> 
            <label> 
             <input id="login-remember" type="checkbox" name="remember" value="1"> Remember me 
            </label> 
            </div>--> 
           </div> 


          <div style="margin-top:10px" class="form-group"> 
           <!-- Button --> 

           <div class="col-sm-12 controls"> 
            <button id="btn-login" type="submit" class="btn btn-success">Login </button> 


           </div> 
          </div> 


          <div class="form-group"> 
           <div class="col-md-12 control"> 
            <div style="border-top: 1px solid#888; padding-top:15px; font-size:85%" > 
             Don't have an account! 
            <a href="/signup"> 
             Sign Up Here 
            </a> 
            </div> 
           </div> 
          </div> 
         </form> 



        </div> 
       </div> 
    </div> 

</div> 
</body> 
</html> 

답변

0

응용 프로그램에 세션 모듈이 설치되어 있지 않은 것 같습니다. 그런 다음 require을 다음 npm 명령

npm install express-session 

를 사용하여 express-session를 설치하고 app.js 파일 그 후

var expressSession = require('express-session'); 
app.use(expressSession({secret: 'your secret', saveUninitialized: true, resave: false})); 

에서 그것을 구성, 그것을 잘 작동합니다.

+0

감사합니다. 알아 냈습니다. Expression-session이 설치되지 않았습니다. app.js에서 설치 및 구성한 후, 제 앱이 정상적으로 작동했습니다. –