Diary

@ssig33

認証自作、 Rails 、 Devise

img https://ockeghem.pageful.app/post/item/uQFX4oRNbnax82V

これを読んで思ったことなんですけど、 Ruby On Rails 界隈では「認証は自作すべきではない、デファクトスタンダードの Devise を使うべき」という考え方が一般にあるように思います。

ではその Devise なんですけど、ドキュメントに以下のようにあります。

Starting with Rails?

If you are building your first Rails application, we recommend you do not use Devise. Devise requires a good understanding of the Rails Framework. In such cases, we advise you to start a simple authentication system from scratch. Here's a few resources that should help you get started:

https://github.com/heartcombo/devise#starting-with-rails

「Rails について深い理解がないならば、 Devise は使うな」とあります。この方針は10 年近く前から書かれています。

これは実際大変重要な指針で、例えば Devise はログイン時にログインした IP アドレスを User モデルに保存しますが、この User モデルを何も考えずに to_json して公開 API として提供してしまえば、ログインユーザーの IP アドレスが漏洩してしまいます。これがどういう問題かは今まさにホットな出来事です。

はっきりといえば Devise は「やりすぎ」「おせっかい」なライブラリであり、実際に Rails のフレームワーク、認証認可の知識、セキュリティや法務の知識がある程度そろっていなければ使いこなせないライブラリです。

なので僕はこれは絶対に使ってはいけないものだと思っています。まず自分自身が「good understanding of the Rails Framework」を持っていると自信を持って言い切れるでしょうか。僕はその自信はありません。例えそう言い切れるとしても、あなたが作っているプロダクトにかかわる人員が今後絶対に「good understanding of the Rails Framework」を持っていると言い切ることができるでしょうか。そんなことはありえないのであって、いつかどこかでチームはジュニアレベルのエンジニアを受け入れるものです。

私なら枯れたソフトウェアを使います。

徳丸さんのいうところのこの言葉は真実だとは思うのですが、コミュニティにおいて深く受け入れられており、 10 年以上の歴史があるような認証ライブラリが、安心して安全に使えるものだとは言い切れません。すくなくとも Devise という悪い実例があります。

じゃあどうすべきかとか言われると僕もどうしたらいいのか分からないのですが、「デファクトスタンダードになっていても案外信用はできない」「README はよく読め」ぐらいはすくなくとも言えると思います。

16 Aug 2020 Sun 01:43 (UTC)