セキュリティで保護されたログインを作成します。私はセッションを追加したいのですが、どのように一緒に使うべきかを理解できません。express-sessionとexpress-mysql-sessionを使用してログインエンドポイントを作成する方法
私は2つのコードを持っていますが、1つのコードはexpress-mysql-session
から来て、私が書いたコードはlogin(/ 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
}));
ここで、端末の出力を示します。上のコードはうまくいきましたが、それが何をしたのかは分かりません。私はそれがその後、その後、以下の出力
$ 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を使用して作成した基本的なログイン認証エンドポイントで、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
を使用してローカルで実行しているMySQLへの接続を確立している参照してください。これは動作しますが、express-session
、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')}/`);
});
authを処理し、基礎知識を得るためのいくつかの例や、潜在的に高水準のライブラリを探してください。そうであるように、あなたはすでにsqliと平文のパスワード記憶装置を持っているようです。パスワードは – pvg
、私は上記のbcryptを使用します。ありがとうございました。 – devwannabe
downvoteとは何ですか?私の主な質問は、高速セッション統合に関連しており、私もコードを含んでいます。 – devwannabe