2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Express+MySQLでログインする

Posted at

前回の記事ではユーザーtestパスワードtestのみのログインユーザーであった為、MySQLにユーザー情報を入れ、そこを参照してログインするを実装した備忘録です。

各バージョン

  • Node v12.13.1
  • express-session 1.17.1
  • passport 0.4.1
  • passport-local 1.0.0
  • mysql 2.18.1
  • bookshelf 1.2.0
  • knex 0.21.1

では実装手順です。
必要なモジュールをインストールします。

terminal
npm install i mysql knex bookshelf

前回記事のユーザー名・パスワードをチェックするプログラムです。

index.js
passport.use(new localStrategy({
  usernameField:'username',
  passwordField:'password',
  passReqToCallback: true,
  session:false,
},function(req,username,password,done){
  process.nextTick(function(){
    if(username === 'test' && password === 'test'){
      return done(null,username);
    }else{
      console.log('Login Error');
      return done(null,false,{message:'パスワードが正しくありません'});
    }
  })
}));

if(username===....のところをMySQLからデータを参照するプログラムに変更します。
実際に運用する場合は、パスワードはハッシュ化すべきでしょうが、今回はやっていません。

index.js

var mysql = require('mysql');
var knex = require('knex')({
  client:'mysql',
  connection:{
    host:'localhost',
    user:'root',
    password:'',
    database:'データベース名',
    charset:'utf8',
  }
});
var Bookshelf = require('bookshelf')(knex);
var User = Bookshelf.Model.extend({
//1
  tableName:'users'
});

passport.use(new localStrategy({
  usernameField:'username',
  passwordField:'password',
  passReqToCallback: true,
  session:false,
},function(req,username,password,done){
  process.nextTick(function(){
//2
    var reqName = req.body.username;
    var reqPass = req.body.password;
    
    User.query({where: {username:reqName}, andWhere:{password:reqPass}})
    .fetch().then((model) => {
      if(model){
        return done(null,username);
      }else{
        console.log('Login Error');
        return done(null,false,{message:'パスワードが正しくありません'});
      }
    });
  });
}));

//1はユーザーデータがあるテーブル名を指定。
//2は/loginから送られてきたユーザー名とパスワードとデータベースを参照しています。

今回はここまでですが、本来はバリデーションを行ったり、ユーザー名はあってるけどパスワードが違う判定を行ったりするべきだと思いますが、その実装が出来たらまた、記事を書きます。

間違い、指摘がありましたらお願いします。
以上です。

参考文献

Node.js超入門第2版

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?