質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

5690閲覧

rails 認証システム作るならdeviseか自作メソッドのどちらがスタンダードですか?

TakumaN

総合スコア120

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/06/12 01:32

deviseを使って認証システムを作ってみたのですが、ものすごくコードが複雑な気がしました。
自作のメソッドならもっとコンパクトでスッキリ書けています。
と言っても、まだrails歴1年くらいなので、どっちが良いのかわかりません。
プロの現場では、deviseなどのgemか、それとも自作メソッドのどちらがスタンダードなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問