第5回勉強会
Node.jsにおけるユーザ認証
~クッキー&セッション方式~
内村 康一
今日の目次
第1章 クッキー・セッションとは??
第2章 Node.jsでの実装~基本編~
第3章 ログイン認証を作ってみよう
第1章
第1章 クッキー・セッションとは??
クッキー
WEBブラウザを通じて訪問者のPCに一時的にデータを保存する
仕組み。利用者の識別に利用されることが多く、IDが保存される
とクッキーが有効な間はアクセス可能になる。
セッション情報
クッキーがクライアント側に保存されるのに対し、セッ...
今回使用する方式
メールとパスワードでユーザ認証
認証できたらセッション開始
同時にユーザ名とパスワードを含む暗号化されたクッキーを送信
その後はクッキーに含まれるユーザ名とパスワードでセッションを維持
第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());...
var sequelize = new Sequelize('testdb', 'root', '●●●●', { : ●にはDBパスワ
ードを入力
host: "localhost", : アドレスを入力
port: 3306 : 3306が...
第3章 ログイン認証を作ってみよう
第3章 ログイン認証を作ってみよう
app.post('/reg', function(req, res){
var user = {};
user.name = sanitize(req.body.name); : ユーザ名
user.pass = encrypt(saniti...
app.post('/login', function(req, res){
var user = {};
user.mail = sanitize(req.body.mail); : メール
user.pass = sanitize(encr...
app.get('/', function(req, res){
var cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function( c...
function gen_session(user,res) {
var auth_token = encrypt(user.mail +'t' + user.pass +'t','hoge');
 : ユーザのメールとパスワードを暗号化したも...
EJSファイル群は一般的なものなので、
jsdoitのhttp://jsdo.it/Koichi.Uchimura/td4z
を参照してコピペするなりしてください。
5.EJSは・・・
/regist  で登録
/login でログイン
トップページに「ログインしたよ。」と表示されれば
成功です。
6.動作すると
次回は未定です。
どなたかネタを持ってきて下さると嬉しいです。
9月までにはもう一回したいですね。
次回予告
ご清聴ありがとうございました。
ありがとうございました。
Upcoming SlideShare
Loading in …5
×

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

564 views
491 views

Published on

第5回鹿児島Node.jsの会のきわめて簡単な資料です。よろしくお願いします。

Published in: Software
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
564
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. 第5回勉強会 Node.jsにおけるユーザ認証 ~クッキー&セッション方式~ 内村 康一
  2. 2. 今日の目次 第1章 クッキー・セッションとは?? 第2章 Node.jsでの実装~基本編~ 第3章 ログイン認証を作ってみよう
  3. 3. 第1章 第1章 クッキー・セッションとは??
  4. 4. クッキー WEBブラウザを通じて訪問者のPCに一時的にデータを保存する 仕組み。利用者の識別に利用されることが多く、IDが保存される とクッキーが有効な間はアクセス可能になる。 セッション情報 クッキーがクライアント側に保存されるのに対し、セッション情報 はサーバ側に保存される。クライアントにセッションID(ランダム )を送り、その後はこのIDをやりとりすることで同一性を確認し、 接続を維持する。 第1章 クッキー・セッションとは??
  5. 5. 今回使用する方式 メールとパスワードでユーザ認証 認証できたらセッション開始 同時にユーザ名とパスワードを含む暗号化されたクッキーを送信 その後はクッキーに含まれるユーザ名とパスワードでセッションを維持
  6. 6. 第2章 第2章 Node.jsでの実装~基本編~
  7. 7. はじめに モジュールのインストール npm install crypto npm install validator npm install mysql npm install sequelize を実行する。(ejs,expressも)
  8. 8. 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
  9. 9. 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
  10. 10. 第3章 ログイン認証を作ってみよう 第3章 ログイン認証を作ってみよう
  11. 11. 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.登録機能
  12. 12. 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.ログイン機能
  13. 13. 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.ログイン機能
  14. 14. 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.モジュールの解説
  15. 15. EJSファイル群は一般的なものなので、 jsdoitのhttp://jsdo.it/Koichi.Uchimura/td4z を参照してコピペするなりしてください。 5.EJSは・・・
  16. 16. /regist  で登録 /login でログイン トップページに「ログインしたよ。」と表示されれば 成功です。 6.動作すると
  17. 17. 次回は未定です。 どなたかネタを持ってきて下さると嬉しいです。 9月までにはもう一回したいですね。 次回予告
  18. 18. ご清聴ありがとうございました。 ありがとうございました。

×