2012-12-26 4 views
2

현재 Node.jsExpress.js을 사용하는 웹 앱을 구축 중입니다.Node.js 사용자 이름 및 비밀번호 인증

을 app.js : 나는 http://www.domain.com/loginpost 요청을 수신하는 내 주요 app.js 파일에 사용자 이름과 암호를 사용하여 간단한 서버 측 인증을 할 수있는 방법을 찾고 있어요

app.post('/login', function(req, res) { 
    // some server-side code for a username and password 
} 

클라이언트 측에서 나는 사용자 이름과 암호가있는 간단한 로그인 양식을 가지고 있습니다. 이 양식은 서버에 게시로가는 :

index.html을

<form method="post" action="/login"> 
<input type="text" id="user" name="user" /> 
<input type="password" id="pass" name="pass" /> 
<button type="submit">Login</button> 
</form> 

내가 어떤 ExpressJS 플러그인이 없이 사용을 달성하기 위해 찾고 있어요.

편집 : 그럼 내 질문은 ExpressJS 및 NodeJS에서 간단한 사용자 이름과 암호 인증을 얻으려면 어떻게해야합니까?

+0

좀 더 구체적으로 기재 할 수 있습니까? 실제로 질문하지 않았습니다. – JohnnyHK

+0

http://devsmash.com/blog/password-authentication-with-mongoose-and-bcrypt – chovy

답변

0

쿠키를 사용하거나 다른 노드 모듈에 추가없이 필요성을 ExpressJS에 포함 된 Connect 미들웨어, 을 사용하여 찾고 있었다 I found the answer : 응용 프로그램을 실행하고 http://localhost:8080로 이동 한 후

var express = require('express'); 

function authorize(username, password) { 
    return 'someone' === username & 'password' === password; 
} 

var app = express.createServer(
    express.basicAuth(authorize) 
); 

app.get('/', function(request, response) { 
    response.send('Authorized!'); 
}); 

console.log('Starting server...') 
app.listen(8080); 

, 그것은 프롬프트 사용자 이름과 비밀번호는 심플 스.

+2

그냥 최신 버전의 익스프레스에 대한이 작동하지 않을 추가 할 싶었어. 다음과 같이 간단하게 사용할 수 있습니다 : app.use (express.basicAuth ('user', 'password')); – bakytn

3

아주 간단합니다. ExpressJS는 Node.js 내의 기본 http 서버의 ontop을 구축하고 노드 모듈에 연결하는 초소형 프레임 워크입니다.

인증 시스템을 만들려면 세션을 사용하십시오.

app.use(express.cookieSession()); 

그런 다음 저장하고로드 세션 위해 req.session을 사용할 수 있습니다 : 먼저이 줄을 호출해야합니다.

app.post('/login', function(req, res) { 
    if (req.session.username & req.session.password != null) { 
     // Already logged in. 
    } else { 
     var q = db.query("SELECT * FROM `users` WHERE `username`='" + req.params.username + "' AND `password`='" + req.params.password + "'"); 

     if (q) { 
      // Set the sessions. 
      req.session.username = req.params.username; 
      req.session.password = req.params.password; 
     } 
    } 
}); 

기본 예. 당신은 분명히 입력을 sanitize하고 그것을 안전하게해야하지만, 그것은 당신을 시작해야합니다.

8

ExpressJS 세션을 사용하면 세션 쿠키를 보유 할 수 있습니다. cookieParser 및 세션 저장소가 필요합니다. 그러나이 ExpressJS 기능을 확장하고 싶지 않다면 (메시지에서 알 수있는 것입니다) 토큰이나 비밀 임시 문자열로 자신의 세션을 관리해야합니다.

ExpressJS 세션을 사용하는 것이 좋지만 ExpressJS 쿠키없이이 작업을 수행하는 것이 좋습니다.

  • 로그인 할 때마다 고유 한 토큰을 만들어 나중에 조회 할 수 있도록 저장하십시오.
  • 각 요청에 대해 클라이언트에서 해당 토큰을 보내고 서버에서 확인하십시오. 모든 요청에 ​​지금

    app.post("/login", function(req, res) { 
        if(req.body.username && req.body.password) { 
         // check username and password 
         if(authenticated) { 
          // create a token and store it with the current date (if you want it to expire) 
          var token = generateAndStoreRandomString(req.body.username); 
          res.redirect("http://your.domain/path?token=" + token); 
          return; 
         } 
         // Do something if username or password wrong 
        } 
        // Do something if no username or password 
    }); 
    

    : 토큰이 유효하지 않은 경우 다음

가 로그인 코드 예제입니다 로그인에 리디렉션

app.get("somePath", function(req, res) { 
    if(!req.query.token) { 
     res.redirect("http://your.domain/login"); 
     return; 
    } 
    // Check token in database, if it exists and it hasn't expired 
    if(!authenticated) { 
     res.redirect("http://your.domain/login"); 
     return; 
    } 
    // The user is authenticated. Do the actions required by "somePath" 
}); 

시도를 프로세스가 정리해야하는 결국 토큰이 만료됩니다. 결국 토큰이 합쳐지기 때문입니다.ExpressJS cookieParser 및 세션 저장소를 사용하려는 경우 많은 기사와 예제가 있습니다. 문제가있는 경우 다른 질문을 게시하십시오.

나 자신을 반복하고 ExpressJS 세션을 사용해보십시오. 이 방법은 https 대신 http를 사용하면 쉽게 도용 될 수 있습니다.

+0

+1 - 매우 자세히 답변 해 주셔서 감사합니다. –

관련 문제