보안 로그인을 만들고 싶습니다. 세션을 추가하고 싶지만 어떻게 함께 사용해야하는지 알 수 없습니다.express-session 및 express-mysql-session을 사용하여 로그인 끝점을 만드는 방법
나는 2 개의 코드를 가지고 있는데, 하나의 코드는 express-mysql-session
에서 왔고 내가 작성한 코드와 로그인 (/ api/login) 엔드 포인트가 있습니다.
다음은 express-mysql-session의 readme.md에서 복사 한 코드이며 작동합니다.
var express = require('express');
var app = module.exports = express();
var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var options = {
host: 'localhost',
port: 3306,
user: 'root',
password: 'password',
database: 'session_test'
};
var sessionStore = new MySQLStore(options);
app.use(session({
key: 'session_cookie_name',
secret: 'session_cookie_secret',
store: sessionStore,
resave: true,
saveUninitialized: true
}));
다음은 터미널의 출력입니다. 위의 코드는 잘 돌아 갔지만 실제로 무엇을했는지는 확실하지 않았습니다. 나는 NETSTAT 다음 명령
tcp4 0 0 127.0.0.1.3306 127.0.0.1.52470 ESTABLISHED
tcp4 0 0 127.0.0.1.52470 127.0.0.1.3306 ESTABLISHED
$ DEBUG=express-mysql-session* node index.js
express-mysql-session:log Creating session store +0ms
express-mysql-session:log Setting default options +2ms
express-mysql-session:log Creating sessions database table +46ms
express-mysql-session:log Setting expiration interval: 900000ms +42ms
express-mysql-session:log Clearing expiration interval +0ms
그런 다음 아래 내가 Express를 사용하여 만든 기본 로그인 인증 엔드 포인트 인 출력을 사용하여 로컬로 실행 MySQL의 연결을 설립했다 참조하십시오. 이 작동하지만 , express-mysql-session
뿐만 아니라 crypt, bcrypt or scrypt-for-humans
을 사용하고 있지만 통합 방법을 잘 모르겠습니다.
const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const app = express();
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.set('port', (process.env.API_PORT || 8000));
const connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'password',
database : 'authdb'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
app.post('/api/login', function(req, res) {
const user_id = req.body.user_id;
const password = req.body.password;
let response = {};
res.setHeader('Content-Type', 'application/json');
connection.query('SELECT password from user WHERE `username` = "' + user_id + '"' , function(err, rows) {
if (err) throw err;
if (rows.length > 0) {
if (password === rows[0].password) {
response.status = 200;
response.message = "authenticated";
response.authenticated = true;
response.user_id = user_id;
} else {
response.status = 403;
response.message = "Login failed!";
response.authenticated = false;
response.user_id = user_id;
}
} else {
response.status = 403;
response.message = "Login failed!";
response.authenticated = false;
response.user_id = user_id;
}
res.status(response.status).send(JSON.stringify(response));
});
});
app.listen(app.get('port'),() => {
console.log(`Find the server at: http://localhost:${app.get('port')}/`);
});
인증을 처리하고 잠재적 인 고급 라이브러리를 검색하여 기본 기능을 직접 활용 해보십시오. 그것이 그렇듯이, 당신은 이미 sqli vuln과 plaintext 암호 저장소를 가지고있는 것처럼 보입니다. 비밀번호는 – pvg
이고, 위에서 언급 한 bcrypt를 사용할 것입니다. 고맙습니다. – devwannabe
downvote는 무엇입니까? 내 주요 질문은 표현 세션 통합과 관련이 있었고 코드도 포함되었습니다. – devwannabe