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

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

ただいまの
回答率

88.37%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,698

TakumaN

score 120

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

deviseはログイン認証以外に,メール認証や不正ログインに対するロック等認証周りの様々な設定が簡単に扱える多機能なライブラリです。

実装は複雑に見えるかも知れませんが,認証だけであれば実際は セッションにログイン情報持たせてパスワードハッシュ化してXSSやスクリプトインジェクションなどのセキュリティ対策を施す処理をモデルで一般化して実装したものに過ぎないので,何も複雑なことはやっていません。しかしどんなモデルやコントローラも一般化してログイン処理を行うので,rails gでモデルやviewを生成するとすぐに認証できる状態のコードが生成出来ます。
ログインを別々のモデルで行いたい時もすぐに追加できます。

deviseの元コードが読めるのであれば自分で実装するにしても結果的にdeviseをほとんど部分化するだけの実装になりdeviseを使った方が効率いいことに気付くと思います。

ただブラックボックスに見えて分かりづらいから脱却するには学習コストがかかるのも,事実なので,単純な認証しかいらない。セキュリティ対策も問題ない。deviseの機能なんて全部自分で実装出来るしもっとシンプルに書けるし手間でもないというレベルであれば全部実装してもいいと思います

またどうやってwebアプリケーションで認証を実装するのか知らないのにdeviseを使うと使ってて消耗したり手の込んだカスタマイズをやりたくても仕様が解らなくて断念せざるを得ないという事になったりするので,deviseを使うのであれば,ログインモデルやセッションにどのような情報を持たせてどのようにデータベースと照らし合わせどのように認証後コントローラで処理させるかくらいの知識は身につけてから使うと良いと思います。

質問者様が色んな認証機能を実装したいどのように認証するか知りたいと思うのであればdeviseのコードから受ける恩恵が大きいと思うので,deviseの仕様を理解して使っていくことをお勧めします。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+2

第3の選択肢としてsorceryというのもあります。devsieのように上から下まで全てを提供するわけではなく、主に認証のコアとなる機能だけを提供し、利用者側が自分のコードで利用するというスタンスのライブラリです。これも踏まえて、述べていきたいと思います。

「スタンダード」と言われるとどれもがそうであり、そうではないと思います。Railsの認証を「ほぼ全部自作」「sourceryを使う」「deviseを使う」の関係は、ちょうどWebアプリを「ほぼ全部自作」「Sinatraを使う」「Railsを使う」という関係と似ているかと思います。どれも正解ではあるし、どれも正解ではありません。

何を言いたいかというと、結局作る物によるということです。特殊なことがほとんど無い通常の認証を作るのに自作でdeviseと同じ機能を実装するのは馬鹿げています。deviseであればほんの数回コマンドを叩くだけで同じ事ができるからです。逆に、通常とは異なるような認証を実装したいときに、deviseを使うことは茨の道でしょう。気付けば、ほぼ全ての部分でカスタマイズしていたなんてことがあるかも知れません。sorceryはその中間です。カスタマイズありとなしの両方をまかなえるかというとまかなえますが、逆に言うと中途半端とも言えます。

知っておくべきなのはそれぞれが何ができるのか、採用するにあたって利点と欠点は何なのかです。プログラミングにおいて「銀の弾丸」は存在し得ません。何をしたいかということから、自分でよりベターだと思う物を選択する以外ありません。まずはそれぞれについて知ることから始めると良いと思います。

なお、認証は、セキュリティに関する多くの事に考慮する必要があり、少しのコードで書けるような物ではありません。つまり、devise並のことをしたいなら、devise並のコード量になると言うことです。もし、自作ですっきり書けていると思うなら、きっとそれは、セキュリティの考慮が欠けていて、脆弱性をはらんだ認証の可能性があります。もし、Webアプリケーションのセキュリティに関して詳しくないのであれば、自作という選択は避けるべきです。少なくとも、deviseのコードを理解し、deviseがしていることを把握できるレベルでなければ、難しいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る