前回の記事ではユーザー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(newlocalStrategy({usernameField:'username',passwordField:'password',passReqToCallback:true,session:false,},function(req,username,password,done){process.nextTick(function(){if(username==='test'&&password==='test'){returndone(null,username);}else{console.log('Login Error');returndone(null,false,{message:'パスワードが正しくありません'});}})}));
if(username===....のところをMySQLからデータを参照するプログラムに変更します。
実際に運用する場合は、パスワードはハッシュ化すべきでしょうが、今回はやっていません。
index.js
varmysql=require('mysql');varknex=require('knex')({client:'mysql',connection:{host:'localhost',user:'root',password:'',database:'データベース名',charset:'utf8',}});varBookshelf=require('bookshelf')(knex);varUser=Bookshelf.Model.extend({//1tableName:'users'});passport.use(newlocalStrategy({usernameField:'username',passwordField:'password',passReqToCallback:true,session:false,},function(req,username,password,done){process.nextTick(function(){//2varreqName=req.body.username;varreqPass=req.body.password;User.query({where:{username:reqName},andWhere:{password:reqPass}}).fetch().then((model)=>{if(model){returndone(null,username);}else{console.log('Login Error');returndone(null,false,{message:'パスワードが正しくありません'});}});});}));
//1はユーザーデータがあるテーブル名を指定。
//2は/loginから送られてきたユーザー名とパスワードとデータベースを参照しています。
今回はここまでですが、本来はバリデーションを行ったり、ユーザー名はあってるけどパスワードが違う判定を行ったりするべきだと思いますが、その実装が出来たらまた、記事を書きます。
間違い、指摘がありましたらお願いします。
以上です。
参考文献