SlideShare a Scribd company logo
第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

PDF
第29回長岡開発者勉強会
PDF
Windows2000におけるコンピュータ室環境の構築
PPTX
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
PDF
SSD+Squidで画像をキャッシュしなイカ?
PPTX
Hudson初心者向けデモ
PPTX
PPTX
Technical session 2 iaa s 始めました~自社内にある windows も linux もそして sql server も azur...
PPTX
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
第29回長岡開発者勉強会
Windows2000におけるコンピュータ室環境の構築
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖
SSD+Squidで画像をキャッシュしなイカ?
Hudson初心者向けデモ
Technical session 2 iaa s 始めました~自社内にある windows も linux もそして sql server も azur...
EWD 3トレーニングコース#8 ewd-xpressメッセージ・サイクルの解剖

Viewers also liked (18)

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

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