はじめに
自分の備忘録として、わからなかったことや詰まった部分をアウトプットしています。
同じ部分で悩んでいる方の力になったら幸いです。
何に詰まったのか
現在ポートフォリオを作成しており、バックエンドをrails apiで開発をしています。
その中でアカウントを作成しなくてもTwitterのアカウントでログインができる機能を実装したいと考えました。
この機能を実現するためには、ログイン機能のgemとして有名なdevise以外に何が必要なのかな?と思い調べたところ、
・devise_token_auth
・omniauth
のgemが検索でヒットしました。
実装方法についてはたくさんの記事があったので、おそらく理解していなくてもなんとなくで作成できる気がします。
「それぞれ何の役割があるのか/何をしたいときにどのgemが必要なのかが分かっていない」まま開発をしてもエラーの際にとても時間がかかったり、目的からずれた使い方をしてしまうと思ったので実装前にそれぞれの役割を簡単に整理しようと思いました。
色々な記事を参考にして自分なりに整理をしてみましたが、ポートフォリオ作成中の初学者なので間違った理解があるかもしれません。
もし間違った内容や補足内容があればご指摘を頂けますと幸いです。
devise_token_auth
deviseのログイン機能ではsession認証を使用しており、devise_token_authは、railsをapiモードで使用する際にログイン機能でトークン認証を行うためのgemのようです。(セッション認証、トークン認証については色々と記事がヒットするので是非調べてみてください)
また、deviseがGemfileに入っていないと、devise_token_authでエラーが起きてしまうことがあるようなので、セットでGemfileに書く必要がありそうです。
session認証では、cookieを使用して状態を維持(ECサイトで買い物リストに入れる等)します。
もしrailsをapiモードでデータを提供する立場の場合、そのデータを使う先がネイティブアプリ(app storeとかでインストールするアプリのこと)の可能性があり、その場合はcookieを使用できないので、その代わりにトークンを使って認証をする必要があります。
railsをapiモードでデータを提供する立場の場合、そのデータを使う先がネイティブアプリ(app storeとかでインストールするアプリのこと)の可能性があり
※この箇所はrails+react Nativeを使ってアプリを作成した場合(スマホアプリのバックエンドをrailsが担う)のような場面のことなのではないかと解釈しております。
この箇所は下記の方の記事を参考にさせて頂きました。
omniAuth
こちらはすごくシンプルです。
一言で言うと外部のアカウントを使用してログインやユーザー登録ができるようになるgemです。
使用する際には、omniauthのgemとomniauth-twitterのようにomniauth-[使用したいサービス名]のgemをGemfileに記載する必要があります。
例
gem 'omniauth'
gem 'omniauth-twitter' #Twitterを使用したい場合
終わりに
最初はdevise+omniauthのgemだけ使っている記事があったり、devise+devise_token_authを使用した記事があったりと何を使ったらいいのか頭がこんがらがってしまいましたが、調べてみると役割が全然違いました。
理解が浅い箇所がまだ大量にありますが、使用するものを調べて自分の理解を深めていきたいです!
ここでつまづく人もそんなにいないかもしれませんが、僕が実際詰まったので誰かの助けになったら幸いです!