SlideShare a Scribd company logo
1 of 45
Download to read offline
電算部ネットワーク講座 Ⅱ 
Node.js で Web アプリケーション開発
前回のおさらい 
• テンプレートエンジン Hogan.js で HTML の 
自動生成。 
• Express で HTTP Header の取得、設定
Hogan.js
テンプレート 
views/template.html 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>{{title}}</title> 
</head> 
<body> 
<h1>{{title}}</h1> 
<ul> 
{{#list}} 
<li>{{.}}</li> 
{{/list}} 
</ul> 
</body> 
</html> 
繰り返し 
変数展開
HTML の生成 
server.js 
var express = require("express"); 
var hogan = require("hogan-express"); 
var path = require("path"); 
! 
var app = express(); 
! 
// ビューの設定 
app.set("views", path.join(__dirname, "views")); 
app.set("view engine", "html"); 
app.engine("html", hogan); 
! 
app.get("/", function(req, res){ 
// HTML のレンダリング (生成) 
res.render("template", { 
title: "template example", 
list: ["node.js", "express", "hogan"] 
}); 
}); 
! 
app.listen(3000); 
View データ
毎回スライドに server.js 
全体を書くのは冗長なので
HTML の生成 
server.js (ルートの一部) 
app.get("/", function(req, res){ 
// HTML のレンダリング (生成) 
res.render("template", { 
title: "template example", 
list: ["node.js", "express", "hogan"] 
}); 
});
このように、今後はルートの 
一部だけを抜粋して表記する
コマンドプロンプト 
(cmd.exe) で実行 
必要なモジュールのインストール 
> npm install express hogan-express 
! 
サーバの起動 
> node server.js 
! 
! 
停止する時は Ctrl + C を入力。 
コードの修正を反映させるためには、毎回起動し直す。
実行結果
HTTP Header
Header の取得と設定 
server.js (ルートの一部) 
app.get("/header", function(req, res){ 
// User-Agent の取得 
var ua = req.headers["user-agent"]; 
// X-Powered-By の設定 
res.set("X-Powered-By", "densan"); 
! 
// レスポンスの送信 
res.send("User-Agent: " + ua); 
});
HTTP Header 
• User-Agent: クライアントのアプリケーション 
を情報が含まれている。 
PC/スマホの判定に使われる。 
• X-Powered-By: サーバのアプリケーション情 
報が含まれている事がある。 
PHP/5.4.22 など。
復習おわり
今回の内容 
• Google アカウント認証
Google アカウント認証 
Google アカウントを用いて本人確認をする 
認証方法。 
技術的には OAuth/OpenID が用いられて 
いる。
OAuth/OpenID 
OAuth はサードパーティ製アプリケーションに 
パスワードを教えること無く、サービスのリソー 
スを提供する仕組み。 
! 
※サービスのリソース:カレンダーに登録されて 
いる予定、メール、連絡先などのユーザがサー 
ビスに登録しているデータ。
OAuth/OpenID 
OpenID はサードパーティ製アプリケーショ 
ンに第三者を通して身元を証明するための仕 
組み。主にログインに使われる。 
! 
※第三者:Google など
Passport.js
Passport.js 
Node.js で OAuth や OpenID を簡単に扱う 
ためのライブラリ。 
Google, Twitter, Facebook などに対応して 
いる。 
! 
http://passportjs.org/
依存関係が増えてくると、何の 
モジュールに依存していたか 
把握しきれなくなってくる
package.json を使う
npm init 
対話的に答えていくと、最後に 
package.json が生成される。 
> npm init 
! 
(中略) 
! 
name: (demo) 
! 
version: (1.0.0) 
description: 
entry point: (server.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to C:Usersww24Desktopdemopackage.json: 
! 
(中略) 
! 
Is this ok? (yes)
package.json 
{ 
"name": "demo", 
"version": "1.0.0", 
"description": "", 
"main": "server.js", 
"dependencies": { 
} 既に依存している 
"hogan-express": "^0.5.2", 
"express": "^4.9.5" 
}, 
"devDependencies": {}, 
"scripts": { 
"test": "echo "Error: no test specified" && exit 1", 
"start": "node server.js" 
}, 
"author": "", 
"license": "ISC" 
} 
モジュールが列挙される
package.json 導入後の 
npm install
npm install --save 
> npm install --save passport passport-google 
! 
このように --save というオプションを付けると package.json に追記されます。 
! 
> npm i --save passport passport-google 
! 
※ install は i と略記できます。
package.json 
{ 
"name": "demo", 
"version": "1.0.0", 
"description": "", 
"main": "server.js", 
"dependencies": { 
"express": "^4.9.5", 
"hogan-express": "^0.5.2", 
"passport": "^0.2.1", 
"passport-google": "^0.3.0" 
}, 
"devDependencies": {}, 
"scripts": { 
"test": "echo "Error: no test specified" && exit 1", 
"start": "node server.js" 
}, 
"author": "", 
"license": "ISC" 
} 
}モジュールが追加された
session
session 
Web アプリケーションに於いて、 
同一のユーザを判別する仕組み。 
! 
ログイン状態の保持に利用され、 
技術的には Cookie などを用いる。
もし session が無いと 
毎回リクエスト毎 (ページが変わる度) に、 
・ログイン情報 (ID, Password) 
・入力途中のデータ 
をサーバに送信しなければならない。
非常に不便
express-session 
> npm i --save express-session 
! 
Express で session を扱うモジュールを導入する。
本題 
Google アカウント認証
Express + Passport 
フレームワークの Express と OAuth/OpenID の 
ライブラリ Passport を組み合わせると、 
簡単に Google/Twitter/Facebook の認証が実装 
できる。 
! 
http://passportjs.org/guide/google/
Express + Passport 
server.js (ファイルの先頭に記述) 
var session = require("express-session"); 
var passport = require("passport"); 
var GoogleStrategy = require("passport-google").Strategy; 
! 
passport.use(new GoogleStrategy({ 
returnURL: "http://localhost:3000/auth/callback", 
realm: "http://localhost:3000/" 
}, function (id, profile, done) { 
console.log("id:", id); 
console.log("profile:", profile); 
! 
profile.id = id; 
! 
done(null, profile); 
}));
Express + Passport 
server.js (前スライドの続き) 
var users = {}; 
! 
passport.serializeUser(function (user, done) { 
users[user.id] = user; 
done(null, user.id); 
}); 
! 
passport.deserializeUser(function (id, done) { 
var user = users[id]; 
! 
if (user) { 
done(null, user); 
} else { 
done("user is not exists"); 
} 
});
Express + Passport 
server.js (app = express() の次の行に記述) 
// session settings 
app.use(session({ 
name: "sess-id", 
cookie: { 
path: "/", 
httpOnly: true, 
maxAge: null 
}, 
secret: "secret" 
})); 
! 
// passport middleware 
app.use(passport.initialize()); 
app.use(passport.session());
Express + Passport 
server.js (ルートの一部) 
// 認証ページ 
app.get("/auth", passport.authenticate("google")); 
! 
// 認証コールバックページ 
app.get("/auth/callback", passport.authenticate("google", { 
successRedirect: "/auth/success", 
failureRedirect: "/auth/fail" 
}));
Express + Passport 
server.js (ルートの一部) 
// 認証成功ページ 
app.get("/auth/success", function (req, res) { 
res.send("認証に成功しました。"); 
}); 
! 
// 認証失敗ページ 
app.get("/auth/success", function (req, res) { 
res.send("認証に失敗しました。"); 
});
起動して 
http://localhost:3000/auth 
をブラウザで開く
余裕があれば Hogan.js で 
美しい HTML を出力しよう
終わり

More Related Content

What's hot

Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
Hiroshi Oyamada
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
Kazuhiro Kotsutsumi
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
Shuhei Iitsuka
 
Htaccessで困る
Htaccessで困るHtaccessで困る
Htaccessで困る
denet1999
 
メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)
Ashitaba YOSHIOKA
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
oranie Narut
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
 

What's hot (20)

Twitter連携chrome extension作り方
Twitter連携chrome extension作り方Twitter連携chrome extension作り方
Twitter連携chrome extension作り方
 
PowerShell 小技集
PowerShell 小技集PowerShell 小技集
PowerShell 小技集
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
Do not use document.write
Do not use document.writeDo not use document.write
Do not use document.write
 
かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう かんたん Twitter アプリをつくろう
かんたん Twitter アプリをつくろう
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
 
Windows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMIWindows スクリプトセミナー WMI編 VBScript&WMI
Windows スクリプトセミナー WMI編 VBScript&WMI
 
後期03
後期03後期03
後期03
 
Nodejs
NodejsNodejs
Nodejs
 
後期講座03
後期講座03後期講座03
後期講座03
 
Htaccessで困る
Htaccessで困るHtaccessで困る
Htaccessで困る
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
 
メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)メタプログラミングRuby勉強会#7(fluentプラグイン)
メタプログラミングRuby勉強会#7(fluentプラグイン)
 
Chrome Apps のデバイスAPI
Chrome Apps のデバイスAPIChrome Apps のデバイスAPI
Chrome Apps のデバイスAPI
 
20081003
2008100320081003
20081003
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 

Viewers also liked

2013 04-29 american art collaborative lod meeting - washington dc - web
2013 04-29 american art collaborative lod meeting - washington dc - web2013 04-29 american art collaborative lod meeting - washington dc - web
2013 04-29 american art collaborative lod meeting - washington dc - web
lecmaj
 

Viewers also liked (17)

前期講座04
前期講座04前期講座04
前期講座04
 
後期講座08
後期講座08後期講座08
後期講座08
 
前期講座07
前期講座07前期講座07
前期講座07
 
Illust bookmark
Illust bookmarkIllust bookmark
Illust bookmark
 
後期05
後期05後期05
後期05
 
前期講座08
前期講座08前期講座08
前期講座08
 
Git 初心者のための GitHub Pages
Git 初心者のための GitHub PagesGit 初心者のための GitHub Pages
Git 初心者のための GitHub Pages
 
前期講座06
前期講座06前期講座06
前期講座06
 
group presentation katrina cortez (final revision)
group presentation   katrina cortez (final revision)group presentation   katrina cortez (final revision)
group presentation katrina cortez (final revision)
 
後期講座07
後期講座07後期講座07
後期講座07
 
後期講座01
後期講座01後期講座01
後期講座01
 
前期講座03
前期講座03前期講座03
前期講座03
 
OpenIL vol.1
OpenIL vol.1OpenIL vol.1
OpenIL vol.1
 
2013 04-29 american art collaborative lod meeting - washington dc - web
2013 04-29 american art collaborative lod meeting - washington dc - web2013 04-29 american art collaborative lod meeting - washington dc - web
2013 04-29 american art collaborative lod meeting - washington dc - web
 
後期講座05
後期講座05後期講座05
後期講座05
 
pixiv SUMMER BOOT CAMP 2013
pixiv SUMMER BOOT CAMP 2013pixiv SUMMER BOOT CAMP 2013
pixiv SUMMER BOOT CAMP 2013
 
Docker で Deep Learning
Docker で Deep LearningDocker で Deep Learning
Docker で Deep Learning
 

Similar to 後期02

ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
Yosuke Furukawa
 
最近のRails開発のはなし
最近のRails開発のはなし最近のRails開発のはなし
最近のRails開発のはなし
Yoichi Toyota
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
totty jp
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 

Similar to 後期02 (20)

ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
densan2014-late01
densan2014-late01densan2014-late01
densan2014-late01
 
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api   cms どうでしょう - 大阪夏の陣初めての Data api   cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
 
多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用多要素認証による Amazon WorkSpaces の利用
多要素認証による Amazon WorkSpaces の利用
 
初めての Data api
初めての Data api初めての Data api
初めての Data api
 
最近のRails開発のはなし
最近のRails開発のはなし最近のRails開発のはなし
最近のRails開発のはなし
 
Azure Functions Tips
Azure Functions TipsAzure Functions Tips
Azure Functions Tips
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Html5 Web Applications
Html5  Web ApplicationsHtml5  Web Applications
Html5 Web Applications
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
 
HTML5 on ASP.NET
HTML5 on ASP.NETHTML5 on ASP.NET
HTML5 on ASP.NET
 
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
 
20080524
2008052420080524
20080524
 

More from Takenori Nakagawa (12)

TensorFlow 入門
TensorFlow 入門TensorFlow 入門
TensorFlow 入門
 
機械学習を用いたパターンロック認証の強化手法
機械学習を用いたパターンロック認証の強化手法機械学習を用いたパターンロック認証の強化手法
機械学習を用いたパターンロック認証の強化手法
 
GitHub Travis-CI Go!
GitHub Travis-CI  Go!GitHub Travis-CI  Go!
GitHub Travis-CI Go!
 
01.app
01.app01.app
01.app
 
Service Workers Push API Hands-on
Service Workers Push API Hands-onService Workers Push API Hands-on
Service Workers Push API Hands-on
 
Service Workers
Service WorkersService Workers
Service Workers
 
OpenGL 3DCG
OpenGL 3DCGOpenGL 3DCG
OpenGL 3DCG
 
WebGL
WebGLWebGL
WebGL
 
01:artificial life
01:artificial life01:artificial life
01:artificial life
 
phpck
phpckphpck
phpck
 
前期講座09
前期講座09前期講座09
前期講座09
 
前期講座05
前期講座05前期講座05
前期講座05
 

Recently uploaded

Recently uploaded (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

後期02

  • 1. 電算部ネットワーク講座 Ⅱ Node.js で Web アプリケーション開発
  • 2. 前回のおさらい • テンプレートエンジン Hogan.js で HTML の 自動生成。 • Express で HTTP Header の取得、設定
  • 4. テンプレート views/template.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{{title}}</title> </head> <body> <h1>{{title}}</h1> <ul> {{#list}} <li>{{.}}</li> {{/list}} </ul> </body> </html> 繰り返し 変数展開
  • 5. HTML の生成 server.js var express = require("express"); var hogan = require("hogan-express"); var path = require("path"); ! var app = express(); ! // ビューの設定 app.set("views", path.join(__dirname, "views")); app.set("view engine", "html"); app.engine("html", hogan); ! app.get("/", function(req, res){ // HTML のレンダリング (生成) res.render("template", { title: "template example", list: ["node.js", "express", "hogan"] }); }); ! app.listen(3000); View データ
  • 7. HTML の生成 server.js (ルートの一部) app.get("/", function(req, res){ // HTML のレンダリング (生成) res.render("template", { title: "template example", list: ["node.js", "express", "hogan"] }); });
  • 9. コマンドプロンプト (cmd.exe) で実行 必要なモジュールのインストール > npm install express hogan-express ! サーバの起動 > node server.js ! ! 停止する時は Ctrl + C を入力。 コードの修正を反映させるためには、毎回起動し直す。
  • 12. Header の取得と設定 server.js (ルートの一部) app.get("/header", function(req, res){ // User-Agent の取得 var ua = req.headers["user-agent"]; // X-Powered-By の設定 res.set("X-Powered-By", "densan"); ! // レスポンスの送信 res.send("User-Agent: " + ua); });
  • 13. HTTP Header • User-Agent: クライアントのアプリケーション を情報が含まれている。 PC/スマホの判定に使われる。 • X-Powered-By: サーバのアプリケーション情 報が含まれている事がある。 PHP/5.4.22 など。
  • 15. 今回の内容 • Google アカウント認証
  • 16. Google アカウント認証 Google アカウントを用いて本人確認をする 認証方法。 技術的には OAuth/OpenID が用いられて いる。
  • 17. OAuth/OpenID OAuth はサードパーティ製アプリケーションに パスワードを教えること無く、サービスのリソー スを提供する仕組み。 ! ※サービスのリソース:カレンダーに登録されて いる予定、メール、連絡先などのユーザがサー ビスに登録しているデータ。
  • 18. OAuth/OpenID OpenID はサードパーティ製アプリケーショ ンに第三者を通して身元を証明するための仕 組み。主にログインに使われる。 ! ※第三者:Google など
  • 20. Passport.js Node.js で OAuth や OpenID を簡単に扱う ためのライブラリ。 Google, Twitter, Facebook などに対応して いる。 ! http://passportjs.org/
  • 23. npm init 対話的に答えていくと、最後に package.json が生成される。 > npm init ! (中略) ! name: (demo) ! version: (1.0.0) description: entry point: (server.js) test command: git repository: keywords: author: license: (ISC) About to write to C:Usersww24Desktopdemopackage.json: ! (中略) ! Is this ok? (yes)
  • 24. package.json { "name": "demo", "version": "1.0.0", "description": "", "main": "server.js", "dependencies": { } 既に依存している "hogan-express": "^0.5.2", "express": "^4.9.5" }, "devDependencies": {}, "scripts": { "test": "echo "Error: no test specified" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC" } モジュールが列挙される
  • 26. npm install --save > npm install --save passport passport-google ! このように --save というオプションを付けると package.json に追記されます。 ! > npm i --save passport passport-google ! ※ install は i と略記できます。
  • 27. package.json { "name": "demo", "version": "1.0.0", "description": "", "main": "server.js", "dependencies": { "express": "^4.9.5", "hogan-express": "^0.5.2", "passport": "^0.2.1", "passport-google": "^0.3.0" }, "devDependencies": {}, "scripts": { "test": "echo "Error: no test specified" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC" } }モジュールが追加された
  • 29. session Web アプリケーションに於いて、 同一のユーザを判別する仕組み。 ! ログイン状態の保持に利用され、 技術的には Cookie などを用いる。
  • 30. もし session が無いと 毎回リクエスト毎 (ページが変わる度) に、 ・ログイン情報 (ID, Password) ・入力途中のデータ をサーバに送信しなければならない。
  • 32. express-session > npm i --save express-session ! Express で session を扱うモジュールを導入する。
  • 34. Express + Passport フレームワークの Express と OAuth/OpenID の ライブラリ Passport を組み合わせると、 簡単に Google/Twitter/Facebook の認証が実装 できる。 ! http://passportjs.org/guide/google/
  • 35. Express + Passport server.js (ファイルの先頭に記述) var session = require("express-session"); var passport = require("passport"); var GoogleStrategy = require("passport-google").Strategy; ! passport.use(new GoogleStrategy({ returnURL: "http://localhost:3000/auth/callback", realm: "http://localhost:3000/" }, function (id, profile, done) { console.log("id:", id); console.log("profile:", profile); ! profile.id = id; ! done(null, profile); }));
  • 36. Express + Passport server.js (前スライドの続き) var users = {}; ! passport.serializeUser(function (user, done) { users[user.id] = user; done(null, user.id); }); ! passport.deserializeUser(function (id, done) { var user = users[id]; ! if (user) { done(null, user); } else { done("user is not exists"); } });
  • 37. Express + Passport server.js (app = express() の次の行に記述) // session settings app.use(session({ name: "sess-id", cookie: { path: "/", httpOnly: true, maxAge: null }, secret: "secret" })); ! // passport middleware app.use(passport.initialize()); app.use(passport.session());
  • 38. Express + Passport server.js (ルートの一部) // 認証ページ app.get("/auth", passport.authenticate("google")); ! // 認証コールバックページ app.get("/auth/callback", passport.authenticate("google", { successRedirect: "/auth/success", failureRedirect: "/auth/fail" }));
  • 39. Express + Passport server.js (ルートの一部) // 認証成功ページ app.get("/auth/success", function (req, res) { res.send("認証に成功しました。"); }); ! // 認証失敗ページ app.get("/auth/success", function (req, res) { res.send("認証に失敗しました。"); });
  • 41.
  • 42.
  • 43.
  • 44. 余裕があれば Hogan.js で 美しい HTML を出力しよう