Railsより簡å˜ã«SNSを作れるよã†ã«ã™ã‚‹ã“ã¨ã‚’目指ã—ãŸãƒ©ã‚¤ãƒ–ラリ
social-cms-backend
を改良ã—ã¾ã—ãŸã€‚
ã“れã¾ã§ã¯ã€èªè¨¼æ©Ÿæ§‹ã¯Facebook連æºã®ã¿ãŒå®Ÿè£…ã•れã¦ã„ãŸã®ã§ã™ãŒã€
Facebookã«ä¾å˜ã—ãŸããªã„アプリを作るケースも考ãˆã€
今回HTTP Digestèªè¨¼ã‚‚入れã¾ã—ãŸã€‚
Formã«ã‚ˆã‚‹ãƒ‘スワードèªè¨¼ã‚‚一応ã‚ã£ãŸã®ã§ã™ãŒã€ã“れã¯å‹•作確èªç”¨ã§ã€not for production扱ã„ã§ã™ã€‚
ã‚„ã¯ã‚Šç”Ÿã®ãƒ‘スワードãŒãƒãƒƒãƒˆä¸Šã‚’æµã‚Œã‚‹ã®ã¯ã‚ˆããªã„ã¨ã„ã†ã“ã¨ã§ã€‚
(SSLãªã—ã®æƒ³å®šï¼‰
Digestèªè¨¼ã®ã‚µãƒ¼ãƒå´ã¯
passport-http
を使ã„ã¾ã—ãŸã€‚
Digestèªè¨¼ã‚’ãã®ã¾ã¾ä½¿ã†ã®ã¯ä¸ä¾¿ãªã®ã§ã€ï¼’ã¤å·¥å¤«ã‚’ã—ã¾ã—ãŸã€‚
一ã¤ã¯ã€RememberMeクッã‚ーを併用ã™ã‚‹ã“ã¨ã§ã€
ã‚‚ã†ä¸€ã¤ã¯ã€JavaScriptã§Digestを生æˆã—ã¦èªè¨¼ã™ã‚‹ã“ã¨ã§ã™ã€‚
Digestèªè¨¼ã®æœ€å¤§ã®å•題ã¯UIãŒãƒ–ラウザä¾å˜ã ã¨ã„ã†ã“ã¨ã§ã™ã€‚
realmã§æŒ‡å®šã™ã‚‹æ–‡å—列ã—ã‹æŒ‡å®šã§ãã¾ã›ã‚“。
ã¾ãŸã€ãƒ–ラウザãŒãƒ‘スワードを覚ãˆã¦ã—ã¾ã†ã®ã§ã€ã‚¢ãƒ—リå´ã‹ã‚‰ãƒã‚°ã‚¢ã‚¦ãƒˆã§ãã¾ã›ã‚“。
ãã“ã§ã€Digestã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’JavaScriptã§ç”Ÿæˆã—ã¾ã—ãŸã€‚
ã“れã¯ã€å®Œå…¨ãªä»•様通りã§ã¯ã‚りã¾ã›ã‚“。細ã‹ã„話ã¯çœãã¾ã™ãŒã€
今回ã®ã‚µãƒ¼ãƒå®Ÿè£…ã§ã¯ãŸã¾ãŸã¾nonceã®ã‚µãƒ¼ãƒå´ã®ãƒã‚§ãƒƒã‚¯ã‚’çœç•¥ã—ã¦ã„ãŸã®ã§ã§ãã¦ã—ã¾ã£ãŸã¾ã§ã§ã™ã€‚
ãŸã ã€ã‚‚ã—ãƒã‚§ãƒƒã‚¯ã§ã¯ã˜ã‹ã‚ŒãŸå ´åˆã§ã‚‚通常ã®ãƒ–ラウザã®Digestèªè¨¼ã«
fallbackã™ã‚‹ã ã‘ãªã®ã§ã€ãƒªã‚¹ã‚¯ãŒå¢—ãˆã‚‹ã‚ã‘ã§ã¯ãªã„ã¯ãšã§ã™ã€‚
逆ã«ã€ãƒ‘スワードを一回目ã§é–“é•ãˆãŸå ´åˆã‚‚fallbackã—ã¦ã—ã¾ã„ã¾ã™ã€‚
ã“ã®ã‚ãŸã‚Šã€ã„ã„解決法ãŒãªã„よã†ã§ã™ã€‚
(ãã‚‚ãã‚‚Digestèªè¨¼ã®ä»•様ã«å¾“ã‚ãšã€ãªã‚“ã¡ã‚ƒã£ã¦Digestã«ã—ã¦ã—ã¾ãˆã°ã„ã„ã®ã‹ã‚‚)
Digestèªè¨¼ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã¨ã—ã¦
request
ã‚’unit testã§ä½¿ã„ã¾ã—ãŸã€‚使ãŠã†ã¨ã—ã¦ã‹ã‚‰æ°—ã¥ã„ãŸã®ã§ã™ãŒã€
Digestèªè¨¼ã®å®Ÿè£…ãŒä¸å分ã ã£ãŸã®ã§ã€ç›´ã—ã¦Pull Requestã—ã¦ãŠãã¾ã—ãŸã€‚
無事マージã•れã¾ã—ãŸã€‚
social-cms-backendã¯angular.jsã§Twitterã£ã½ã„アプリを作るã®ã«
便利ãªã®ã§ã™ãŒã€ã¡ã‚‡ã£ã¨ä½¿ã„æ–¹ã«ãã›ãŒã‚りã¾ã™ã€‚
ã‚‚ã£ã¨ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’増やã•ãªã„ã¨ä½¿ãˆã‚‹ãƒ¬ãƒ™ãƒ«ã«ãªã‚‰ãªã„ã‹ã‚‚。
昨日ã€
Nodeã¨Angularを使ã£ã¦Twitterクãƒãƒ¼ãƒ³ã‚’15分ã§ä½œã‚‹ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚ャスト
を書ã„ãŸã®ã§ã™ãŒã€ãƒ©ã‚¤ãƒ–ラリã®ç´¹ä»‹ã‚’ã—æããŸã®ã§ç´¹ä»‹ã—ã¾ã™ã€‚
ãã‚‚ãã‚‚ã®å‹•機ã¯ã€Twitterクãƒãƒ¼ãƒ³ã‚’ç°¡å˜ã«ä½œã‚ŠãŸã„ã¨æ€ã£ãŸã“ã¨ãŒç™ºç«¯ã§ã™ã€‚
ãã“ã§ã€ãªã«ã‹ã„ã„ライブラリã¯ãªã„ã‹ã¨è‰²ã€…調ã¹ãŸã‚‰ã€Railsã‚‚ã©ãã®ãƒ•ルスタックフレームワークãŒã„ãã¤ã‹è¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚
ä»–ã«ã‚‚ã„ã£ã±ã„ã‚ã‚‹ã®ã§ã™ãŒã€æ°—ã«ãªã£ãŸã®ãŒã“ã®ã‚ãŸã‚Šã§ã™ã€‚
ã¨ã“ã‚ãŒã€ãªã‚“ã¨è¨€ã†ã‹AngularJSを使ãŠã†ã¨ã™ã‚‹ã¨ã“れらã®ãƒ©ã‚¤ãƒ–ラリã¯ã‚ªãƒ¼ãƒãƒ¼ã‚¹ãƒšãƒƒã‚¯ãªæ„Ÿã˜ãŒã™ã‚‹ã®ã§ã™ã€‚Ruby on Railsã®ã‚ˆã†ã«ãƒ‡ãƒ•ァクトãŒä¸€ã¤ã‚る状態ã§ã‚れã°ã„ã„ã§ã™ãŒã€ã‚‚ã©ããŒã„ã£ã±ã„ã‚る状態ã§ã¯ã‚³ãƒ³ãƒ™ãƒ³ã‚·ãƒ§ãƒ³ã‚‚統一感ãŒãªã•ãã†ã§ã™ã€‚
Angularã‚’å‰æã¨ã™ã‚‹ã®ã§ã‚れã°ã€ãƒ•レームワークã§ã¯ãªãã‚‚ã£ã¨ã‚·ãƒ³ãƒ—ルãªãƒ©ã‚¤ãƒ–ラリãŒã‚れã°ã„ã„ã®ã§ã¯ãªã„ã‹ã¨æ€ã„ã¾ã—ãŸã€‚ãれã§ã‚‚ã£ã¦ã€é¢å€’ãªã“ã¨ã¯ãã®ãƒ©ã‚¤ãƒ–ラリãŒå¼•ãå—ã‘ã¦ãれるよã†ãªã€‚
ãã“ã§ã€Twitterã‚„Facebookã®ã‚ˆã†ãªSNSã®ã‚µã‚¤ãƒˆã‚’作るã“ã¨ã«é™å®šã—ãŸãƒ©ã‚¤ãƒ–ラリを作りã¾ã—ãŸã€‚node.jsã§ã¯express.jsãŒã»ã¼ãƒ‡ãƒ•ァクトãªã®ã§expressã®middlewareã¨ã—ã¦ä½œã‚Šã¾ã—ãŸã€‚middlewareã«ã™ã‚‹ã“ã¨ã§ã€å˜ä¸€ã®ãƒ•レームワークã«ä¾å˜ã™ã‚‹ã“ã¨ãªãã€ä»–ã®ã‚¢ãƒ—リã«ã‚¢ãƒ‰ã‚ªãƒ³ã™ã‚‹å½¢ã§å°Žå…¥ã§ãã¾ã™ã€‚
é¢å€’ãªã€èªè¨¼ã‚„権é™ç®¡ç†ã®æ©Ÿèƒ½ã¯ãƒ©ã‚¤ãƒ–ラリãŒé¢å€’ã¿ã¦ãれã¾ã™ã€‚
ç¾çжã§ã¯ã€Facebookèªè¨¼ã¨ã€æ¨™æº–çš„ãªæ¨©é™ç®¡ç†ï¼ˆownership basedï¼‰ã®æ©Ÿèƒ½ãŒç”¨æ„ã•れã¦ã„ã‚‹ã ã‘ã§ã™ãŒã€ãƒ—ラグインã¨ã—ã¦ä»–ã®èªè¨¼ã‚„権é™ç®¡ç†ã®æ©Ÿèƒ½ã‚’è¿½åŠ ã§ãるよã†ã«ãªã£ã¦ã„ã¾ã™ã€‚
ã¾ãŸã€é€šçŸ¥ï¼ˆãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ©ãƒ¼ãƒˆãªã©ï¼‰ã®æ©Ÿèƒ½ã‚‚ä»Šå¾Œè¿½åŠ ã—ã¦ããŸã„ã¨è€ƒãˆã¦ã„ã¾ã™ã€‚
ã“ã®ãƒ©ã‚¤ãƒ–ラリを使ã†ã¨ã€ãƒ•ãƒãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ã‚’作るã ã‘ã§ã™ãサービスã§ãã¾ã™ã€‚Railsã®ã‚ˆã†ã«ãƒ‡ãƒ•ォルトãŒãªã„ã®ã§ä½œã‚‰ãªã„ã¨ãªã«ã‚‚ã§ããªã„ã®ã§ã™ãŒã€Angularã«æ…£ã‚Œã¦ã„れã°ã‚³ãƒ³ãƒ™ãƒ³ã‚·ãƒ§ãƒ³ã‚’æ„è˜ã—ã¦ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹ã‚ˆã‚Šã‚‚ãšã£ã¨æ¥½ã‹ã‚‚ã—れã¾ã›ã‚“。
ã¾ãšã¯ã€
ã“ã¡ã‚‰
ã‹ã‚‰ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚ャストを見ã¦ã¿ã‚‹ã¨é›°å›²æ°—ãŒåˆ†ã‹ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。
ã‚‚ã—ã‹ã—ãŸã‚‰ã€åˆ†ã‹ã‚‰ãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。
ソースコードã¯ã€
https://github.com/dai-shi/social-cms-backend
ã«ã‚りã¾ã™ã€‚
8/7追記。
最近知ã£ãŸã®ã§ã™ãŒã€http://sproute.io/ã¨ã„ã†ãƒ•レームワークもã‚るよã†ã§ã™ã。
ã“ã¡ã‚‰ã¯æ¯”較的SNSã«ç‰¹åŒ–ã—ãŸã‚ˆã†ãªãƒ•レームワークã§ã‚るよã†ã§ã™ã€‚
ã»ã¨ã‚“ã©ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãªã—ã§Twitterクãƒãƒ¼ãƒ³ãŒä½œã‚Œã‚‹ã‚ˆã†ã§ã™ã€‚
ã§ã‚‚ã€$99ã£ã¦ã€‚
ã¿ãªã•ã‚“ã€AngularJS使ã£ã¦ã¾ã™ã‹ï¼Ÿ
Angularを使ã†ã¨ã€ãŠæ‰‹è»½ã«Webアプリ(ã¨è¨€ã£ã¦ã„ã„ã®ã‹ãª)ãŒä½œã‚Œã¾ã™ã€‚
ãã®ãŠæ‰‹è»½ã•ã‚’ã•らã«åŠ©ã‘ã‚‹ã®ãŒã€Node.jsã¨ãã®ãƒ©ã‚¤ãƒ–ラリé”ã§ã™ã€‚(ã„ã‚„ã€Nodeã«é™ã£ãŸè©±ã§ã‚‚ãªã„ã§ã™ãŒã€‚)
ç´°ã‹ã„説明ã¯ä»–ã«ãŠä»»ã›ã—ã¾ã™ãŒã€Connect/Expressã‚„ãã®æ§˜ã€…ãªmiddlewareを使ã†ã¨æ©Ÿèƒ½ã‚’è‰²ã€…è¿½åŠ ã§ãã¾ã™ã€‚
今回ã€ãã®middlewareã®ä¸€ã¤ã¨ã—ã¦ã€SNSã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ©ã‚¤ãƒ–ラリを作りã¾ã—ãŸã€‚
ã“れを使ã†ã¨ã€ãƒ•ãƒãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ã‚’作るã ã‘ã§ç°¡å˜ã«SNSã®ã‚µã‚¤ãƒˆãŒã§ãã‚ãŒã‚Šã¾ã™ã€‚
試ã—ã«ã€Twitterクãƒãƒ¼ãƒ³ã‚’作ã£ã¦ã¿ã¾ã—ãŸã€‚今回ã¯ãƒ•ã‚©ãƒãƒ¼æ©Ÿèƒ½ãªã©ãªã—ã®å˜æ©Ÿèƒ½ç‰ˆã§ã™ã€‚ã¡ãªã¿ã«ã€ãƒ•ã‚©ãƒãƒ¼ã‚„ã‚°ãƒ«ãƒ¼ãƒ—ã®æ©Ÿèƒ½ã¯ãƒ©ã‚¤ãƒ–ラリã«ã¯å…¥ã£ã¦ã¾ã™ã€‚
Ruby on Railsã®ã¾ãã‚’ã—ã¦15分ã§ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã™ã‚‹ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã‚ャストを作りã¾ã—ãŸã€‚Nodeã‚„Angularã®çŸ¥è˜ã‚’剿ã¨ã—ã¦ã„ã‚‹ã®ã§ã€è¦‹ã‚‹ã ã‘ãれらãŒç†è§£ã§ãるよã†ã«ãªã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“ãŒã€ã©ã†ãžã”覧ãã ã•ã„。音もテãƒãƒƒãƒ—ã‚‚ãªã—ã€ãれã©ã“ã‚ã‹ãƒžã‚¦ã‚¹ãƒã‚¤ãƒ³ã‚¿ã‚‚ãªã—ã§ã™ã€‚シンプルã«ã€‚
スクリーンã‚ャストを別ウインドウã§é–‹ã
コーディングã—ãŸçµæžœã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯ã“ã¡ã‚‰ã«ç½®ã„ã¦ã‚りã¾ã™ã€‚
https://github.com/dai-shi/twitter-clone-sample/tree/20130804_recorded
実ã¯ä¸€æ–‡å—ã ã‘æ‰“ã¡é–“é•ã„ãŒã‚ã£ã¦ã‚ã¨ã‹ã‚‰ä¿®æ£ã—ã¾ã—ãŸã€‚
ã›ã£ã‹ããªã®ã§ä½œã£ãŸTwitterクãƒãƒ¼ãƒ³ã‚’å‹•ãよã†ã«ã‚¢ãƒƒãƒ—ã—ã¾ã—ãŸã€‚
http://twitterclonesample-nodeangularapp.rhcloud.com/
ã‚‚ã—よã‚ã—ã‘れã°è©¦ã—ã¦ã¿ã¦ãã ã•ã„。