SlideShare a Scribd company logo
1 of 18
Download to read offline
第5回勉強会
Node.jsにおけるユーザ認証
~クッキー&セッション方式~
内村 康一
今日の目次
第1章 クッキー・セッションとは??
第2章 Node.jsでの実装~基本編~
第3章 ログイン認証を作ってみよう
第1章
第1章 クッキー・セッションとは??
クッキー
WEBブラウザを通じて訪問者のPCに一時的にデータを保存する
仕組み。利用者の識別に利用されることが多く、IDが保存される
とクッキーが有効な間はアクセス可能になる。
セッション情報
クッキーがクライアント側に保存されるのに対し、セッション情報
はサーバ側に保存される。クライアントにセッションID(ランダム
)を送り、その後はこのIDをやりとりすることで同一性を確認し、
接続を維持する。
第1章 クッキー・セッションとは??
今回使用する方式
メールとパスワードでユーザ認証
認証できたらセッション開始
同時にユーザ名とパスワードを含む暗号化されたクッキーを送信
その後はクッキーに含まれるユーザ名とパスワードでセッションを維持
第2章
第2章 Node.jsでの実装~基本編~
はじめに
モジュールのインストール
npm install crypto
npm install validator
npm install mysql
npm install sequelize
を実行する。(ejs,expressも)
var randobet = (省略) : ランダム文字列生成
var config = { cookie_secret: randobet(30) }; : セッションID生成
app.use(express.cookieParser()); : クッキーを使用するのに必須
app.use(express.session({
key: 'conn', : セッションキー
secret: config.cookie_secret, : シークレットID
cookie: { httpOnly: true }, : httpのみ許可
expires: false : ここでセッションの期限を設定可能
}));
app.jsの解説1
var sequelize = new Sequelize('testdb', 'root', '●●●●', { : ●にはDBパスワ
ードを入力
host: "localhost", : アドレスを入力
port: 3306 : 3306が標準ポート
});
var Member = sequelize.define('member', { : DB設定
id : Sequelize.INTEGER,
name : Sequelize.STRING,
pass : Sequelize.STRING,
mail : Sequelize.STRING
});
app.jsの解説2
第3章 ログイン認証を作ってみよう
第3章 ログイン認証を作ってみよう
app.post('/reg', function(req, res){
var user = {};
user.name = sanitize(req.body.name); : ユーザ名
user.pass = encrypt(sanitize(req.body.pass), 'hoge'); : パスワード(暗号化)
var SourceCode = Member.build({ : Memberテーブルにビルド
name : user.name,
pass : user.pass,
mail : sanitize(req.body.mail) : sanitizeで特殊文字をエスケープしている
});
SourceCode.save().success(function (){
console.log('DB save success');
res.render('comp.ejs', {msg: "登録が完了しました。"}); : 登録完了
})
.error(function(){
res.render('error.ejs', {msg: "データの保存に失敗しました(データ保存エラー:7004)
"});
});
});
1.登録機能
app.post('/login', function(req, res){
var user = {};
user.mail = sanitize(req.body.mail); : メール
user.pass = sanitize(encrypt(req.body.pass, 'hoge')); : パスワード(暗号化)
if(user){
Member.find({ where: {'mail' : user.mail, 'pass' : user.pass}} ).success(function (data){
if(data && data != ""){
req.session.user = user; : セッション開始
gen_session(user,res); : クッキーを送付
res.redirect('/');
} else {
res.render('error.ejs', {msg: "ログインに失敗しました(データ不在エラー
:2001)"});
};
})
 // 中略
});
2.ログイン機能
app.get('/', function(req, res){
var cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function( cookie ) {
var parts = cookie.split('=');
cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim(); : クッキーから認証情報取出し
});
if(req.session.user && cookies.user){ : セッションが有効でクッキーが存在すれば
var cook = decrypt(cookies.user, 'hoge'); : クッキーの暗号化を解除
var cook_arr = cook.split('t');
Member.find({ where: {'mail' : cook_arr[0], 'pass' : cook_arr[1]}} ).success(function
(data){ : クッキーに含まれている認証情報が一致すれば
if(data && data != ""){
res.render('member.ejs', {}); : メンバーページを描画
} else {
res.render('error.ejs', {msg: "ログインに失敗しました"});
// 中略
});
3.ログイン機能
function gen_session(user,res) {
var auth_token = encrypt(user.mail +'t' + user.pass +'t','hoge');
 : ユーザのメールとパスワードを暗号化したものを
res.cookie('user',auth_token,{path:'/',maxAge: 1000*60*60*24*30});
 : クッキーに乗せて送信
};
4.モジュールの解説
EJSファイル群は一般的なものなので、
jsdoitのhttp://jsdo.it/Koichi.Uchimura/td4z
を参照してコピペするなりしてください。
5.EJSは・・・
/regist  で登録
/login でログイン
トップページに「ログインしたよ。」と表示されれば
成功です。
6.動作すると
次回は未定です。
どなたかネタを持ってきて下さると嬉しいです。
9月までにはもう一回したいですね。
次回予告
ご清聴ありがとうございました。
ありがとうございました。

More Related Content

Viewers also liked

痛すぽ事業計画書
痛すぽ事業計画書痛すぽ事業計画書
痛すぽ事業計画書Koichi Uchimura
 
第7回鹿児島Node.jsの会勉強会資料
第7回鹿児島Node.jsの会勉強会資料第7回鹿児島Node.jsの会勉強会資料
第7回鹿児島Node.jsの会勉強会資料Koichi Uchimura
 
痛すぽ_プレゼン資料
痛すぽ_プレゼン資料痛すぽ_プレゼン資料
痛すぽ_プレゼン資料Koichi Uchimura
 
Innovación y emprendimiento Novarum 140922
Innovación y emprendimiento Novarum 140922Innovación y emprendimiento Novarum 140922
Innovación y emprendimiento Novarum 140922Novarum México
 
Final live project
Final live projectFinal live project
Final live projectKhushbu Shah
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村Koichi Uchimura
 
Stinnes-Entscheidung des BGH
Stinnes-Entscheidung des BGHStinnes-Entscheidung des BGH
Stinnes-Entscheidung des BGHSpruchZ
 
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村Koichi Uchimura
 
第2回鹿児島node.jsの会資料_内村
第2回鹿児島node.jsの会資料_内村第2回鹿児島node.jsの会資料_内村
第2回鹿児島node.jsの会資料_内村Koichi Uchimura
 
第6回鹿児島node.jsの会2資料_内村
第6回鹿児島node.jsの会2資料_内村第6回鹿児島node.jsの会2資料_内村
第6回鹿児島node.jsの会2資料_内村Koichi Uchimura
 
Christmas 2013 with magazine.co.uk
Christmas 2013 with magazine.co.ukChristmas 2013 with magazine.co.uk
Christmas 2013 with magazine.co.ukJellyfishPublishing
 
第3回鹿児島node.jsの会資料_内村
第3回鹿児島node.jsの会資料_内村第3回鹿児島node.jsの会資料_内村
第3回鹿児島node.jsの会資料_内村Koichi Uchimura
 
What's new in digital marketing to improve your subscription marketing
What's new in digital marketing to improve your subscription marketingWhat's new in digital marketing to improve your subscription marketing
What's new in digital marketing to improve your subscription marketingJellyfishPublishing
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村Koichi Uchimura
 
第4回鹿児島node.jsの会資料_内村
第4回鹿児島node.jsの会資料_内村第4回鹿児島node.jsの会資料_内村
第4回鹿児島node.jsの会資料_内村Koichi Uchimura
 
Final live project
Final live projectFinal live project
Final live projectKhushbu Shah
 

Viewers also liked (18)

痛すぽ事業計画書
痛すぽ事業計画書痛すぽ事業計画書
痛すぽ事業計画書
 
第7回鹿児島Node.jsの会勉強会資料
第7回鹿児島Node.jsの会勉強会資料第7回鹿児島Node.jsの会勉強会資料
第7回鹿児島Node.jsの会勉強会資料
 
痛すぽ_プレゼン資料
痛すぽ_プレゼン資料痛すぽ_プレゼン資料
痛すぽ_プレゼン資料
 
えあすぽ
えあすぽえあすぽ
えあすぽ
 
Innovación y emprendimiento Novarum 140922
Innovación y emprendimiento Novarum 140922Innovación y emprendimiento Novarum 140922
Innovación y emprendimiento Novarum 140922
 
Final live project
Final live projectFinal live project
Final live project
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Stinnes-Entscheidung des BGH
Stinnes-Entscheidung des BGHStinnes-Entscheidung des BGH
Stinnes-Entscheidung des BGH
 
第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村第6回鹿児島node.jsの会資料_内村
第6回鹿児島node.jsの会資料_内村
 
第2回鹿児島node.jsの会資料_内村
第2回鹿児島node.jsの会資料_内村第2回鹿児島node.jsの会資料_内村
第2回鹿児島node.jsの会資料_内村
 
第6回鹿児島node.jsの会2資料_内村
第6回鹿児島node.jsの会2資料_内村第6回鹿児島node.jsの会2資料_内村
第6回鹿児島node.jsの会2資料_内村
 
Christmas 2013 with magazine.co.uk
Christmas 2013 with magazine.co.ukChristmas 2013 with magazine.co.uk
Christmas 2013 with magazine.co.uk
 
第3回鹿児島node.jsの会資料_内村
第3回鹿児島node.jsの会資料_内村第3回鹿児島node.jsの会資料_内村
第3回鹿児島node.jsの会資料_内村
 
What's new in digital marketing to improve your subscription marketing
What's new in digital marketing to improve your subscription marketingWhat's new in digital marketing to improve your subscription marketing
What's new in digital marketing to improve your subscription marketing
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Big data wonderland
Big data wonderlandBig data wonderland
Big data wonderland
 
第4回鹿児島node.jsの会資料_内村
第4回鹿児島node.jsの会資料_内村第4回鹿児島node.jsの会資料_内村
第4回鹿児島node.jsの会資料_内村
 
Final live project
Final live projectFinal live project
Final live project
 

第5回鹿児島node.jsの会資料_内村