Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
tank_authとgroceryCRUD
でログインと
管理画面を簡単に作成
CodeIgniter Night
2016-11-04 @noldorinfo
自己紹介
• 竹腰彰成(たけこしあきしげ)
• Twitter: @noldorinfo
• http://blog.noldor.info/
2
今日のテーマ
• どんなプロジェクトでも使うであろう、管理画面に必要な機能
であるログイン機能とCRUD画面を簡単に作る方法をお伝えし
ます
• ログインライブラリ:tank_auth
• CRUDライブラリ:groceryCRUD
• 今日の...
前提条件
CodeIgniter3を採用すべきか、またライブラリを採用すべきか
4
CodeIgniter3採用のメリット・デメリット
• シンプルで学習コストが低い
↑ フレームワークとしての機能が少ない
• 安価なホームページホスティングサーバでも動く
↑ CLIコマンドでの開発サポートはない
(※バッチを作ることはできま...
フルスタックなフレームワーク
• 「フルスタック」=「全部入り」
• よくある機能を列挙すると……
• ルーティング
• 入力バリデーション
• 出力自動エスケープ
• DB接続
• CRUDスキャフォールド
• セッション管理
• ユーザ認証...
フルスタックなフレームワーク
• 「フルスタック」=「全部入り」
• よくある機能を列挙すると…… CI3に
• ルーティング ← ある
• 入力バリデーション ← ある
• 出力自動エスケープ ← ない
• DB接続 ← ある
• CRUDス...
フルスタックなフレームワーク
• 「フルスタック」=「全部入り」
• よくある機能を列挙すると…… CI3に 外部ライブラリ例
• ルーティング ← ある
• 入力バリデーション ← ある
• 出力自動エスケープ ← ない Smarty
• D...
tank_auth
CodeIgniter向けの認証ライブラリ
9
tank_authとは
• CodeIgniter向けに作られた認証ライブラリ
• シンプルながらよく使う機能は押さえている
• ログイン、ログアウト、登録、登録抹消
• メールアドレス認証
• reCAPTCHA対応
• 使用テーブル数4つ、...
CI3で使うにあたって修正が要ります
• CI2向けなので、CI3向けにすこし修正が必要です
• セッション用テーブルをCI2からCI3に変更
• CIのセッションの仕組みを使っているので、DB以外のセッション
ドライバでも使えます
• Cla...
tank_auth使用コード例
実際に使うとどういうコードになるか
12
使用例の要件定義
• 次の条件で使うとします
• 会員登録はユーザの自由にできる
• メールアドレス認証をする
• reCAPTCHAを使う
• 認証関連以外のすべての画面はログインを要求する
13
コントローラ:Login
• ライブラリをそのまま利用します
• したがってviewもライブラリそのままになります
14
reCAPTCHA設定
• third_partyディレクトリではなく自前のconfigを優先して
読むようにautoloadを設定します
• reCAPTCHAにユーザ登録して次の項目を設定します
15
trueに
trueに
reCAPTC...
メール認証設定
• tank_auth.phpで設定します
• email.phpとサーバ設定そのものも忘れないでください
16
trueに
MY_Controllerでログイン強制
• __construct()でログインチェックします
17
Login画面
• こんな感じ
18
reCAPTCHAは旧式です
• tank_auth自体が古いため
最新式にするにはviewの修正が必要です
19
できること・できないこと
• AuthenticationはできるがAuthorizationはできない
• Authentication(認証):本人確認
• Authorization(認可・承認):権限設定
• ユーザごと(ロールごと)に...
groceryCRUD
CodeIgniter向けのCRUD画面生成ライブラリ
21
groceryCRUDとは
• 直訳すると食料品ゴミ
• MySQLで使えるCRUD管理画面
• CRUD: Create / Read / Update / Delete
• テーブル1つを軸にしてレコードを操作する管理画面
• 管理画面の8...
出来上がりイメージ(1)
• 一覧表の出力:デフォルトテーマはちょっと古臭いです
23
出来上がりイメージ(2)
• よくある編集画面
• ラジオボタンや
テキストエリア、
日付入力、
非表示項目など
フィールドタイプを
設定できます
• 今回は例示ありませんが
n対nリレーションの設定も
可能です
24
groceryCRUDの仕組み(1)
• スキーマはDBから自動取得
• メリット:存在するDBこそが正。
DB構造を別ファイルに定義しなくていい
• デメリット:余計な処理が発生している。
想定するスキーマと実際のDBがずれたら
どうなるか不...
DBこそが正
• DBからテーブル定義取得してます
• ちょっと気持ち悪いですねぇ……
フロントサイトには使わないほうが良いです
26
groceryCRUDの仕組み(2)
• ライブラリがテーブル表やフォームのHTMLタグを生成する
• メリット:ヘッダ・フッタを作っておいて
コンテンツ部分をハメ込めば画面が出来上がる
• デメリット:デザインの差し替えにはgroceryCR...
コントローラ(1)
• 日本語名でのラベル表示は必要ですよね
28
コントローラ(2)
• ライブラリに設定値を渡す+α
29
ビュー
• $outputをechoするだけ
• cssとjsを使いますのでそれらを読み込ませるため次ページへ
30
レイアウト用テンプレート
• 毎回<head>タグ書くのはいやなので共通化
31
MY_Outputでレイアウト適用
• フレームワークを拡張してlayout.phpを通すようにします
32
パスワードをhash、更新日時を自動記録
• DBへの保存はdb_insert()とdb_update()を経由するので
それをオーバーライドします
33
注意事項(1)
• アクション名はindex以外にしないと動きません
• ドキュメント化されている仕様です
• Bootstrapテーマを販売していますがバギーです
• テーマ作成の参考にする程度にとどめたほうが良さそうです
• デフォルトテー...
入力でカバーしようとしちゃってます
• POSTデータをstrip_tag()とかマジですか
• 別ルートでDBに保存されるとアウトです
(フロント側からの入力など)
35
注意事項(2)
• 本家へのPull Requestが無視されたので
groceryCRUD改のリポジトリを作りました
• https://github.com/noldor/grocery-crud-kai
• validator でフィルタ...
groceryCRUDのライセンス
• MITライセンスとGPLのデュアルライセンス
• どちらか片方を選ぶ
• どちらを選んだかを宣言する必要はない(黙っていてOK)
• 同梱ライブラリのライセンスは様々ながらセーフである様子
• MITライ...
tank_authのライセンス
• MITライセンスに準じる
• MITライセンス条文が同梱されていない
• いちおうソースコードに1行書いてある
38
ご清聴ありがとうございました
39
Upcoming SlideShare
Loading in …5
×

groceryCRUDとtank_authで簡単に管理画面と認証機能を作る

1,189 views

Published on

ライブラリを使用することでフルスタックフレームワークではないCodeIgniter3の足りない部分の一部を補うことができます。
サンプルコード) https://github.com/noldor/ci-sample-ta-gc

Published in: Technology
  • Be the first to comment

groceryCRUDとtank_authで簡単に管理画面と認証機能を作る

  1. 1. tank_authとgroceryCRUD でログインと 管理画面を簡単に作成 CodeIgniter Night 2016-11-04 @noldorinfo
  2. 2. 自己紹介 • 竹腰彰成(たけこしあきしげ) • Twitter: @noldorinfo • http://blog.noldor.info/ 2
  3. 3. 今日のテーマ • どんなプロジェクトでも使うであろう、管理画面に必要な機能 であるログイン機能とCRUD画面を簡単に作る方法をお伝えし ます • ログインライブラリ:tank_auth • CRUDライブラリ:groceryCRUD • 今日のサンプルコードはgithubにアップしてあります • https://github.com/noldor/ci-sample-ta-gc • スライドは安心して流し読みしてください 3
  4. 4. 前提条件 CodeIgniter3を採用すべきか、またライブラリを採用すべきか 4
  5. 5. CodeIgniter3採用のメリット・デメリット • シンプルで学習コストが低い ↑ フレームワークとしての機能が少ない • 安価なホームページホスティングサーバでも動く ↑ CLIコマンドでの開発サポートはない (※バッチを作ることはできます) • いわゆる「フルスタックフレームワーク」ではありません • ゆえに小規模で把握しやすいです • ゆえに不足する機能が多いです 5
  6. 6. フルスタックなフレームワーク • 「フルスタック」=「全部入り」 • よくある機能を列挙すると…… • ルーティング • 入力バリデーション • 出力自動エスケープ • DB接続 • CRUDスキャフォールド • セッション管理 • ユーザ認証機能 • Unitテスト(自動化テスト) 6
  7. 7. フルスタックなフレームワーク • 「フルスタック」=「全部入り」 • よくある機能を列挙すると…… CI3に • ルーティング ← ある • 入力バリデーション ← ある • 出力自動エスケープ ← ない • DB接続 ← ある • CRUDスキャフォールド ← ない • セッション管理 ← ある • ユーザ認証機能 ← ない • Unitテスト(自動化テスト) ← ある 7
  8. 8. フルスタックなフレームワーク • 「フルスタック」=「全部入り」 • よくある機能を列挙すると…… CI3に 外部ライブラリ例 • ルーティング ← ある • 入力バリデーション ← ある • 出力自動エスケープ ← ない Smarty • DB接続 ← ある • CRUDスキャフォールド ← ない groceryCRUD • セッション管理 ← ある • ユーザ認証機能 ← ない tank_auth • Unitテスト(自動化テスト) ← ある 8
  9. 9. tank_auth CodeIgniter向けの認証ライブラリ 9
  10. 10. tank_authとは • CodeIgniter向けに作られた認証ライブラリ • シンプルながらよく使う機能は押さえている • ログイン、ログアウト、登録、登録抹消 • メールアドレス認証 • reCAPTCHA対応 • 使用テーブル数4つ、ファイル20枚 • 何かあってもコード修正できる程度の量! • ほかに検討すべき候補 • Ion Auth( http://benedmunds.com/ion_auth/ ) • SimpleSAMLphp(※CI特化ではないが機能てんこ盛り) 10
  11. 11. CI3で使うにあたって修正が要ります • CI2向けなので、CI3向けにすこし修正が必要です • セッション用テーブルをCI2からCI3に変更 • CIのセッションの仕組みを使っているので、DB以外のセッション ドライバでも使えます • Classファイルの先頭文字を大文字に変更 • これらの作業はrdlaboさんが作業済みのものを公開くださって います • 「Tank_AuthをCodeigniter3系で動くようにする方法」 https://rdlabo.jp/codeigniter-299.php • https://github.com/rdlabo/Tank_Auth_CI3 11
  12. 12. tank_auth使用コード例 実際に使うとどういうコードになるか 12
  13. 13. 使用例の要件定義 • 次の条件で使うとします • 会員登録はユーザの自由にできる • メールアドレス認証をする • reCAPTCHAを使う • 認証関連以外のすべての画面はログインを要求する 13
  14. 14. コントローラ:Login • ライブラリをそのまま利用します • したがってviewもライブラリそのままになります 14
  15. 15. reCAPTCHA設定 • third_partyディレクトリではなく自前のconfigを優先して 読むようにautoloadを設定します • reCAPTCHAにユーザ登録して次の項目を設定します 15 trueに trueに reCAPTCHAから reCAPTCHAから
  16. 16. メール認証設定 • tank_auth.phpで設定します • email.phpとサーバ設定そのものも忘れないでください 16 trueに
  17. 17. MY_Controllerでログイン強制 • __construct()でログインチェックします 17
  18. 18. Login画面 • こんな感じ 18
  19. 19. reCAPTCHAは旧式です • tank_auth自体が古いため 最新式にするにはviewの修正が必要です 19
  20. 20. できること・できないこと • AuthenticationはできるがAuthorizationはできない • Authentication(認証):本人確認 • Authorization(認可・承認):権限設定 • ユーザごと(ロールごと)にアクセス権限を設定する機能は ありません • アプリごとに要件が変わりやすい部分でもありますので、 ライブラリに頼らず自前実装でも問題は少ないと思います • ユーザ管理画面はありません! • groceryCRUDで作ってみましょう 20
  21. 21. groceryCRUD CodeIgniter向けのCRUD画面生成ライブラリ 21
  22. 22. groceryCRUDとは • 直訳すると食料品ゴミ • MySQLで使えるCRUD管理画面 • CRUD: Create / Read / Update / Delete • テーブル1つを軸にしてレコードを操作する管理画面 • 管理画面の8割がたはこれである程度何とかなるはずです。 残り2割は自前で作成しましょう • CSVアップロード、ウィザード画面とかは無理 • joinしての参照はgroceryCRUDでも可能です。 2テーブル同時更新はできますが作り込む部分が多くなります 22
  23. 23. 出来上がりイメージ(1) • 一覧表の出力:デフォルトテーマはちょっと古臭いです 23
  24. 24. 出来上がりイメージ(2) • よくある編集画面 • ラジオボタンや テキストエリア、 日付入力、 非表示項目など フィールドタイプを 設定できます • 今回は例示ありませんが n対nリレーションの設定も 可能です 24
  25. 25. groceryCRUDの仕組み(1) • スキーマはDBから自動取得 • メリット:存在するDBこそが正。 DB構造を別ファイルに定義しなくていい • デメリット:余計な処理が発生している。 想定するスキーマと実際のDBがずれたら どうなるか不明(エラーになるとは限らない) 25 フロント画面には使えない スキーマ変更の意思疎通は必須
  26. 26. DBこそが正 • DBからテーブル定義取得してます • ちょっと気持ち悪いですねぇ…… フロントサイトには使わないほうが良いです 26
  27. 27. groceryCRUDの仕組み(2) • ライブラリがテーブル表やフォームのHTMLタグを生成する • メリット:ヘッダ・フッタを作っておいて コンテンツ部分をハメ込めば画面が出来上がる • デメリット:デザインの差し替えにはgroceryCRUD自体を 詳しく知る必要がある ※テンプレート機能はあります • 私がbootstrap3に差し替えた時は1人日ほどかかりました。 テーマを作り込むなら2~3人日見る必要がありそうです。 27
  28. 28. コントローラ(1) • 日本語名でのラベル表示は必要ですよね 28
  29. 29. コントローラ(2) • ライブラリに設定値を渡す+α 29
  30. 30. ビュー • $outputをechoするだけ • cssとjsを使いますのでそれらを読み込ませるため次ページへ 30
  31. 31. レイアウト用テンプレート • 毎回<head>タグ書くのはいやなので共通化 31
  32. 32. MY_Outputでレイアウト適用 • フレームワークを拡張してlayout.phpを通すようにします 32
  33. 33. パスワードをhash、更新日時を自動記録 • DBへの保存はdb_insert()とdb_update()を経由するので それをオーバーライドします 33
  34. 34. 注意事項(1) • アクション名はindex以外にしないと動きません • ドキュメント化されている仕様です • Bootstrapテーマを販売していますがバギーです • テーマ作成の参考にする程度にとどめたほうが良さそうです • デフォルトテーマ改造が安定です • バリデータはフィルタリングしてくれません • CIの挙動と異なりますが「対応しない」と明言されています • 今回のサンプルでは挙動をCIに寄せるよう書き換えました • xss対応がいまいちです • v1.6でオプションによる対応が入りますが…… 34
  35. 35. 入力でカバーしようとしちゃってます • POSTデータをstrip_tag()とかマジですか • 別ルートでDBに保存されるとアウトです (フロント側からの入力など) 35
  36. 36. 注意事項(2) • 本家へのPull Requestが無視されたので groceryCRUD改のリポジトリを作りました • https://github.com/noldor/grocery-crud-kai • validator でフィルタリング機能を有効に • xss対策 • php-cs-fixer適用 • ドキュメントのライセンスはありません • 翻訳許可願いの返事がありませんので翻訳できません • 知り合い以外からの連絡・Pull Requestは 基本的に無視しているようです…… 36
  37. 37. groceryCRUDのライセンス • MITライセンスとGPLのデュアルライセンス • どちらか片方を選ぶ • どちらを選んだかを宣言する必要はない(黙っていてOK) • 同梱ライブラリのライセンスは様々ながらセーフである様子 • MITライセンス • 二条項BSDライセンス、三条項BSDライセンス • GPL / MIT のデュアルライセンス • GPL / LGPL / MPL のトリプルライセンス • GPL / 三条項BSD のデュアルライセンス • まとめました → https://github.com/noldor/grocery- crud-kai/blob/master/license-grocery-crud-kai.md 37
  38. 38. tank_authのライセンス • MITライセンスに準じる • MITライセンス条文が同梱されていない • いちおうソースコードに1行書いてある 38
  39. 39. ご清聴ありがとうございました 39

×