deviseを使って認証システムを作ってみたのですが、ものすごくコードが複雑な気がしました。
自作のメソッドならもっとコンパクトでスッキリ書けています。
と言っても、まだrails歴1年くらいなので、どっちが良いのかわかりません。
プロの現場では、deviseなどのgemか、それとも自作メソッドのどちらがスタンダードなのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
deviseはログイン認証以外に,メール認証や不正ログインに対するロック等認証周りの様々な設定が簡単に扱える多機能なライブラリです。
実装は複雑に見えるかも知れませんが,認証だけであれば実際は セッションにログイン情報持たせてパスワードハッシュ化してXSSやスクリプトインジェクションなどのセキュリティ対策を施す処理をモデルで一般化して実装したものに過ぎないので,何も複雑なことはやっていません。しかしどんなモデルやコントローラも一般化してログイン処理を行うので,rails gでモデルやviewを生成するとすぐに認証できる状態のコードが生成出来ます。
ログインを別々のモデルで行いたい時もすぐに追加できます。
deviseの元コードが読めるのであれば自分で実装するにしても結果的にdeviseをほとんど部分化するだけの実装になりdeviseを使った方が効率いいことに気付くと思います。
ただブラックボックスに見えて分かりづらいから脱却するには学習コストがかかるのも,事実なので,単純な認証しかいらない。セキュリティ対策も問題ない。deviseの機能なんて全部自分で実装出来るしもっとシンプルに書けるし手間でもないというレベルであれば全部実装してもいいと思います
またどうやってwebアプリケーションで認証を実装するのか知らないのにdeviseを使うと使ってて消耗したり手の込んだカスタマイズをやりたくても仕様が解らなくて断念せざるを得ないという事になったりするので,deviseを使うのであれば,ログインモデルやセッションにどのような情報を持たせてどのようにデータベースと照らし合わせどのように認証後コントローラで処理させるかくらいの知識は身につけてから使うと良いと思います。
質問者様が色んな認証機能を実装したいどのように認証するか知りたいと思うのであればdeviseのコードから受ける恩恵が大きいと思うので,deviseの仕様を理解して使っていくことをお勧めします。
投稿2016/06/13 17:46
編集2016/06/13 17:49退会済みユーザー
総合スコア0
0
ベストアンサー
第3の選択肢としてsorceryというのもあります。devsieのように上から下まで全てを提供するわけではなく、主に認証のコアとなる機能だけを提供し、利用者側が自分のコードで利用するというスタンスのライブラリです。これも踏まえて、述べていきたいと思います。
「スタンダード」と言われるとどれもがそうであり、そうではないと思います。Railsの認証を「ほぼ全部自作」「sourceryを使う」「deviseを使う」の関係は、ちょうどWebアプリを「ほぼ全部自作」「Sinatraを使う」「Railsを使う」という関係と似ているかと思います。どれも正解ではあるし、どれも正解ではありません。
何を言いたいかというと、結局作る物によるということです。特殊なことがほとんど無い通常の認証を作るのに自作でdeviseと同じ機能を実装するのは馬鹿げています。deviseであればほんの数回コマンドを叩くだけで同じ事ができるからです。逆に、通常とは異なるような認証を実装したいときに、deviseを使うことは茨の道でしょう。気付けば、ほぼ全ての部分でカスタマイズしていたなんてことがあるかも知れません。sorceryはその中間です。カスタマイズありとなしの両方をまかなえるかというとまかなえますが、逆に言うと中途半端とも言えます。
知っておくべきなのはそれぞれが何ができるのか、採用するにあたって利点と欠点は何なのかです。プログラミングにおいて「銀の弾丸」は存在し得ません。何をしたいかということから、自分でよりベターだと思う物を選択する以外ありません。まずはそれぞれについて知ることから始めると良いと思います。
なお、認証は、セキュリティに関する多くの事に考慮する必要があり、少しのコードで書けるような物ではありません。つまり、devise並のことをしたいなら、devise並のコード量になると言うことです。もし、自作ですっきり書けていると思うなら、きっとそれは、セキュリティの考慮が欠けていて、脆弱性をはらんだ認証の可能性があります。もし、Webアプリケーションのセキュリティに関して詳しくないのであれば、自作という選択は避けるべきです。少なくとも、deviseのコードを理解し、deviseがしていることを把握できるレベルでなければ、難しいと思います。
投稿2016/06/13 22:16
総合スコア21735
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。