前置きしますと、理解が追いついていない面が多々あるので支離滅裂な内容になっているかもしれないですが宜しくお願いします。
普段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が含まれているかどうか特に何も処理を書かずとも判別してくれるメソッドと言う解釈でよろしいでしょうか?
長くなってしまいましたが、分からないことが分からないと言う感じの質問になってしまい大変恐縮です。
お手数をおかけしますがご回答をよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。