🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

Ruby on Rails 6

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

6816閲覧

(rails)devise-token-authを試しているがtoken認証の仕組みがいまいち分からない

widget11

総合スコア221

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

JWT(JSON Web Token)

JWT(JSON Web Token)とは、JSONをベースとしたアクセストークンの仕様。電子署名付きのURL safeなJSONのことを指します。電子署名が付いているため、改ざんをチェックできる点がメリットです。

Ruby on Rails 6

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

1グッド

2クリップ

投稿2021/01/02 16:19

編集2021/01/02 18:12

前置きしますと、理解が追いついていない面が多々あるので支離滅裂な内容になっているかもしれないですが宜しくお願いします。

普段Railsアプリを作る際はdeviseを使用して認証機能を作成していました。
ただdeviseはsession認証である為、そのwebアプリをモバイルでも使用したい場合の展開が難しいと言うことで、冬休みを使ってtoken認証を試すべく、devise_token_authを使用してアプリを作っています。

しかしtoken認証(devise-token-auth)の概念が掴めず、またどうtokenを用いて認証ありのwebアプリを作っていったらいいのか分かりません。
またdeviseと同じくdevise-token-authにもuser_signed_in?等のメソッドが用意されていますが、これがどのようにログインしたユーザーのレコードを取っているかが分かりません。
web上の情報ですとcurlやpostmanを叩いて、200が返ってきたね!という情報ばかりで、これをどうwebアプリ上で展開したら良いかということが分からず混乱しております。
またsession認証は認証が成功したらcookieにログイン情報を保存し、次回以降クライアントがサーバーにアクセスしたら、cookieの情報とサーバーが持っているsession情報と照合して本人かどうか担保するということが感覚的には分かりやすいのですが、token認証はどうも勝手が違うようでよく分からないです。

それを踏まえてまず第一の質問です。

1.
devise-token-authを用いて、ログイン(認証系処理へのpost)を行うとresponse headerにはaccess_tokenが返ってくると思います。
access_tokenは飽くまでも認証に成功したという文字通りの印だと思いますが、これはブラウザ上、もしくはDBのどこかに保存したり保持する必要はあるのでしょうか?
tokenの情報はブラウザで保持せず、次の画面等に遷移する際、リクエストヘッダーにこのtokenを含めて使うと、token認証を説明しているウェブページには書いてあったのですが、
つまりログインしているかどうか担保するには何かの画面を見るたびにリクエストにこのaccess_tokenを含ませる、またサーバーからクライアント側に渡すといった処理を書かなきゃいけないのでしょうか?(例えばwebならjavscriptか何かで)
それともdevise-token-authがよしなにやってくれる仕組みを持っているのでしょうか?

またこれに含め第二の質問なのですが

2.

if user_signed_in? @name = current_user.name end

例えばuser_signed_in?はログインしているかどうかbooleanで返す、プレーンなdeviseでもお馴染みなメソッドだと思うのですが、devise-token-authではrequestにaccess_tokenが含まれているかどうか特に何も処理を書かずとも判別してくれるメソッドと言う解釈でよろしいでしょうか?

長くなってしまいましたが、分からないことが分からないと言う感じの質問になってしまい大変恐縮です。
お手数をおかけしますがご回答をよろしくお願いします。

hamasu👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

追記

もうすでに見ているかもしれないですが、token認証だと下記がわかりやすいかと思います。
この中で認可サーバーの役割をこなすのがdevise_token_authとなります。
https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

つまりログインしているかどうか担保するには何かの画面を見るたびにリクエストにこのaccess_tokenを含ませる、またサーバーからクライアント側に渡すといった処理を書かなきゃいけないのでしょうか?

そうです。

devise-token-authではrequestにaccess_tokenが含まれているかどうか特に何も処理を書かずとも判別してくれるメソッドと言う解釈でよろしいでしょうか?

devise-token-authの仕組みをきちんと理解はしていないのですが、リクエストにtokenがなければuser_signed_inしていないという判別を行っているかと思います。

と文章で説明してもなんとなくしかわからないと思うので、udemyをおすすめしました。

英語があまりわからなくても画面のコードを見て、実行するのが主な内容なので問題ないかと思います。
このコースはAPIのリクエスト処理や認証処理をPostmanを利用して実施するので、実践的な形になっています。
また画面のコードを見ながら、手を動かして、どのような動作をするのか確認しながら進むので理解も深まりますし、やり方も学べるかと思います。


全体像がわからないなら一度下記で学ぶと理解しやすいかと思います。
https://www.udemy.com/course/ruby-on-rails-api-the-complete-guide/

投稿2021/01/03 23:05

編集2021/01/07 22:43
no1knows

総合スコア3365

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問