いままで、FlashのActionScript3.0や、Ajaxを使ったり、PHPなんかも駆使してOAuthを実装していました。node.jsではnode-oauthというモジュールを使えば、いとも簡単にOAuth認証ができてしまいます。いとも簡単とはいえ、はまったところがありましたので、今回はnode-oauthを使ってTwitterをOAuth認証する方法と、はまってしまったポイントを抑える内容にしたいと思います。下記の参考サイトに載っていたソースを元に補足します。
参考サイト - http://moonlitscript.com/post.cfm/how-to-use-oauth-and-twitter-in-your-node-js-expressjs-app/ - ciaranj/node-oauth · GitHub - https://github.com/ciaranj/node-oauth
検証、制作環境など Mac OS 10.6 山ライオンって強いの?(´・ω・`) ターミナル.app node.js -v v0.8.4 express version 3.0.0rc3 node-oauth node_modules localhost:3000で検証 TwitterのOAuth認証ができるまでの手順 dev.twitter.comで「Create an app」します。 Website:にはlocalhost:3000を入力したいところですが、Twitterの入力フォームで弾かれるので、localhostと同じURLのhttp://127.0.0.1:3000を入力します。 Callback URL:には、http://127.0.0.1:3000/auth/twitter/callbackと入力しておきます。 必要な情報を入力して、Consumer keyとConsumer secretを取得します。※1 ターミナル.appを開いて、express -sセッションオプションを付けて雛形を作ります。※2 node-oauthをnpm installします。 app.jsを開いて、コーディングします。 $ node app.js でサーバーを立ちあげてアクセスします。 ※1:Consumer keyとConsumer secretの扱いは大切に。 ※2:expressでセッションを使うオプションを使うところが重要なポイントです。 node-oauthのインストール方法 やはり毎度おなじみnpmを使います。expressを使って雛形を作るまでやってみましょう。
//-e はejs、-sはセッションを使うオプション $ express -e -s oauth_sample create : oauth_sample create : oauth_sample/package.json create : oauth_sample/app.
node.jsで使える便利なモジュールはたくさんあります。node-validatorもその1つで、入力した値の検証(バリデート)と、無害化(サニタイズ)してくれるモジュールです。前回と前々回でチャットに関しての記事を書きましたので、今回は簡単にnode-validatorの紹介と、チャットのサンプルにnode-validatorを適応させたいと思います。
https://github.com/chriso/node-validator
チャットでサニタイズしなかったらどうなるか。 前回と前々回の記事では、サニタイズをしていないので、例えばタグを入力してボタンを押して見ると、
html 1
2
3
<h1>こんにちは!</h1> <img src="http://0.gravatar.com/avatar/50dcad2670fb76d401e699e09101d87e?s=500" width="150"> <script>alert('ぼえー')</script> このようにタグがそのまま出たり、悪意あるJavaScriptを実行してしまって、cookieを書き換えられたり、同じページを開いている人にも悪い影響が出てしまう可能性があるので良くないです。これを防ぐ為に、サニタイズをします。
node-validatorのインストール方法 毎度おなじみnpmを使います。
$ npm install validator チャットにサニタイズを適応させる。 Mongooseを使わないバージョンで試してみたいと思います。前々回の【node.js】socket.ioを使って簡単にチャットを作る方法から持ってきます。
$ git clone https://github.com/cotapon/chat-socket_io-sample $ cd chat-socket_io-sample $ npm install validator node_modulesの中にvalidatorが入っているのを確認して、app.jsを編集します。
app.js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
前回の【node.js】socket.ioを使って簡単にチャットを作る方法の続きです。今回はチャットした内容をデータベースに保存する方法です。こうすることによって、一回ブラウザを閉じて再度開いた時に閉じる前のメッセージが残っていたり、途中から参加した人も今までのメッセージが読めるようになります。いくら保存できるようになったとしても、製品レベルには程遠く、脆弱性対策もしていないので、今回は、node.jsでMongoDBを使うことと、MongoDB のオブジェクトモデリングツールであるMongoose(マングース)の使い方のポイントだけを抑えて頂ければと思います。
今回のポイント Mongooseをインストールして簡単な使い方。 チャットのメッセージを保存する。 ブラウザを閉じてもメッセージが残っている。 メッセージを削除する。 削除したメッセージは、相手にも削除されるようにする。 ※予めMongoDBが使える状態にしててください。
必要なnode_modules ejs express mongoose socket.io Mongooseのインストール インストールはいつものnpmでめっちゃ簡単にインストールできます。
$ npm install mongoose app.jsを編集 前回の【node.js】socket.ioを使って簡単にチャットを作る方法のソースからMongooseの追記だけをしたサンプルです。
app.js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
※この記事の続きもよくご覧いただいてます。※
【Node.js】Socket.IO+MongoDBを使って保存できるチャットを作る方法
なんとかチャットを作ることができるようになりました。まだ仕組みの表面しか理解できてないかもしれませんが、入り口には立てたと思います。ただソースを落としてきて、「あー動いた。」でもいいんですが、僕は分からなくてもソースを書いていけば、そのうち理解できるかもという非効率な勉強法が好きなので、^-^; 同じ方がいらっしゃればお役に立てる内容になればと思います。
ソースコード https://github.com/cotapon/chat-socket_io-sample
環境 MacOS 10.6.8
ターミナル.app
node v0.6.11 or v0.8.4 ※
npm v1.1.45
express v2.5.11
socket.io v0.8.7
※node.jsのバージョンによっては、socket.ioが繋がらないなどの現象があります。今回はv0.6.11と、2012年7月31日現在の安定版、v0.8.4でも検証して成功しました。 node.jsのバージョンを確認 まず、node.jsのバージョンを確認しましょう。
$ node -v v0.6.11 もし、v0.6.x以下でしたら、うまくexpressとsocket.ioが繋がらない可能性がありますので、node.jsのバージョンを上げます。 参考にnvmという、node.jsのバージョン管理ツールで変更する方法をメモします。 nvmがインストールされていないかたは、こちらの記事を御覧ください。
//node.js v0.8.4をインストール $ nvm install v0.8.4 //インストールしたバージョンを使います。 $ nvm ues v0.8.4 Now using node v0.8.4 //ターミナルを閉じても使えるようにしておく $ nvm alias default v0.8.4 default -> v0.8.4 npmをインストールする。 ※既にnpmが入ってる方は、ここの項目は飛ばして下さい。
//npmをインストール $ curl http://npmjs.
node.jsはバージョンの違いで、expressやsocket.ioが使えなかったりします。またこれらのバージョンもしかりです。その度にnode.jsのバージョンの上げ下げを実行するのは手間がかかります。そこで、コマンド1つでnode.jsのバージョンを切り替えることができる、Node Version Managerのnvmというのを使います。さらにこのnvmが便利なのは、npm(Node Packege Manager)のパスも通るので、node.jsのバージョンを切り替えた後も楽です。今回は簡単にnvmのインストールの方法から、設定と使い方まで紹介します。
nvmをインストールする インストールにはgitを使います。
$ git clone git://github.com/creationix/nvm.git ~/.nvm git便利ですね。
nvmコマンドを使えるようにしておく $ source ~/.nvm/nvm.sh $ nvm version v0.8.4 この1行目を実行しておかないと、nvmコマンドが使えません。versionはv0.8.4がインストールされているのがわかりました。
node.jsのバージョンをインストールする $ nvm install v0.6.11 インストールには時間が多少かかるので待ちます。
$ nvm use v0.6.11 $ nvm alias default v0.6.11 $ node -v v0.6.11 node.jsのバージョンが切り替わりましたね。もう1つ、2012年7月31日時点での安定版、v0.8.4をインストールしてみましょう。
$ nvm install v0.8.4 //待ちます。 $ nvm use v0.8,4 $ nvm ls v0.6.11 v0.8.4 current: v0.8.4 default -> v0.6.11 lsを使うと、nvmでインストールされたバージョンの一覧が表示されます。currentは現在使っているバージョンです。defaultはそのままでデフォルトで使われるバージョンです。つまり、ターミナルを閉じたりログアウトすると、defaultのバージョンに戻ります。デフォルトで使うnode.jsのバージョンをv0.8.4にしてみましょう。
$ nvm alias default v0.
node.js勉強中です。先人の知恵さまのサイトを見る日々が続きます。色んなサンプルサイトで使われいているexpress。雛形を作成してくれる便利なフレームワークです。このexpressを使って雛形をインストールするわけですが、先人の知恵さまサイトではejsが使われてて、自分の環境では何をやっても絶対にjadeがインストールされてしまっていました。今回はなんでそれが起きたのかと、expressでejsがインストールされない方へ向けての対処法を書きます。
※2012/08/18追記 express version 3.xから、ejsの指定の方法が変わったようです。tamaさんにご教授頂きました。ありがとうございます!
express version 3.xでejsを指定する方法 version 2.xまでは、express -t ejsと指定する方法でしたが、version 3.x以降は、express -eでejsが指定されるみたいです。
//バージョンの確認。 $ express version 3.0.0rc3 //ejsを指定する。 $ express -e sample create : sample create : sample/package.json create : sample/app.js create : sample/public create : sample/public/javascripts create : sample/public/images create : sample/public/stylesheets create : sample/public/stylesheets/style.css create : sample/routes create : sample/routes/index.js create : sample/views create : sample/views/index.ejs install dependencies: $ cd sample && npm install run the app: $ node app ちゃんとejsがインストールされました!^▽^
Tower.jsはnode.jsで使えるモジュールがいっぱい入ってるパッケージです。例えば、node.jsのsocket.ioモジュールでチャットを作ります。CoffeeScriptが使いたいのでモジュールをインストールします。あとそれからそれから、、、というのがだいたい入ってます。
Tower.js
http://towerjs.org/
Tower.js models
http://towerjs.org/models
僕はこんなに使いこなせるかわかりませんが、とりあえず入れてみて動かしてみたいと思います。参考にさせていただいたのは下記のサイト。
さらばExpressよ!Tower.jsを試すの巻
http://codedehitokoto.blogspot.jp/2012/03/expresstowerjs.html[](http://codedehitokoto.blogspot.jp/2012/03/expresstowerjs.html)
Tower.jsはnpmにはいっているのでインストールは簡単です。
Tower.jsインストール手順 // 1.-gオプションを付けてnpmからTower.jsをインストール $ npm install -g tower // 2.$ tower new [フォルダー名] $ tower new sample // 3.sampleフォルダーに移動 $ cd sample // 4.インストールします。 $ npm install // 5.ターミナルを別タブで開いてMongoDBを起動 $ mongod // 6.ターミナルのタブを最初に戻して起動します。 $ node server.js さて、これで動くはずみたいですが、僕のはこんなアラートが出ました。
[Sun, 01 Jul 2012 11:20:01 GMT] INFO Tower development server listening on port 3000 [ERROR] Error Error: failed to connect to [127.