2017-10-18 3 views
0

node.js 및 Redis (Redis 패키지)를 사용하여 로그인 시스템을 만들고 싶지만 입력 데이터를 데이터베이스 데이터와 비교할 때마다 혼란스러운 결과가 발생합니다.로그인 시스템 - Node.js 및 Redis

exports.userLogin = (username, password, errMsg, successMsg, res) => { 
    client.keys("user*", (err, replies) => { 
     for (let i = 0; i < replies.length; i++) { 
      client.hgetall(replies[i], (err, value) => { 
      if (value.user === username && value.password === password) { 
       successMsg(username, res); 
      } else { 
       console.log("length: ", replies.length - 1); 
       console.log("i: ", i); 
       if(replies[i] === replies.length - 1) { 
       errMsg(res); 
       } else { 
       console.log("else statement: ", replies[i] === replies.length - 1); 
       return true; 
       } 
      } 
      }); 
     } 
     }) 
)} 

Example 2

: 나는 로그인과 암호를 확인 더하기 그것은에 errmsg 기능을 Example 1 두 번째 예제를 실행하지 않는 경우에도 거짓 점점 계속

const Redis = require("redis"); 
const client = Redis.createClient(); 
exports.userLogin = (username, password, errMsg, successMsg, res) => { 
    client.keys("user*", (err, replies) => { 
    let isFound = false; 
    for (let i = 0; i < replies.length; i++) { 
     client.hgetall(replies[i], (err, value) => { 
     if (value.user === username && value.password === password) { 
      isFound = true; 
     } 
     }); 
    } 
    console.log(isFound); 
    if (isFound) { 
     successMsg(username, res); 
    } else { 
     errMsg(res); 
    } 
    }) 
)} 

: 이것은 첫 번째 방법입니다 패스워드와 로그인은 정상이지만, 페이지가 뭔가를 불러오고 errMsg 함수를 실행하지 않기 때문에 올바르지 않으면 작동하지 않습니다. 아이디어가 있습니까?

+0

'hgetall'은 비동기 호출이므로 결과를 얻기 전에'isFound'에 대한 테스트가 수행됩니다. –

+0

@ t.niese 어떻게 작동하도록이 코드를 수정할 수 있습니까? – miqezjo

+0

다른 문제는 루프에서 비동기 호출을 생성한다는 것입니다. –

답변

1

가능한 경우 사용자를 저장하기에 더 적합한 것으로 redis를 사용하여 변경하십시오.

그렇지 않은 경우 데이터가 redis로 저장되는 방식을 변경하십시오. 당신은 모든 사용자를 읽고 그것을 반복하고 싶지 않습니다. db 쿼리가 가능한 한 많이 처리하도록하십시오. 아마도 한 가지 방법은 사용자 이름을 키의 일부로 사용하여 올바른 사용자를 직접 찾아보고 거기에서 비밀번호를 확인하는 것입니다.

비밀번호 저장 및 로그인 처리의 보안 부분을 잊지 마십시오. 보안이 필요할 경우 암호 해시를 살펴보고 암호 소금을 추가하십시오.

+0

Redis를 사용해야합니다. 암호 만 해시 할 수 있도록 지금 테스트 중입니다. 나는 사용자로서 키로 시도 할 것이다. – miqezjo