Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9042

Express+MySQLでログインする

$
0
0

前回の記事ではユーザー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から送られてきたユーザー名とパスワードとデータベースを参照しています。

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

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

参考文献

Node.js超入門第2版


Viewing all articles
Browse latest Browse all 9042