2018-04-01#はじめにログイン周りをdeviseを使って実装していたWebサービスがありました。それをアプリ化することになったのですが、deviseはWeb用に作られているのでアプリではその仕組みは使えません。困ったなーと思いいろいろググってみるとdevise_token_authというgemがあることを知りました。devise_token_authスターは2000以上あるんですが、Qiitaのタグ数は4という。実装にあたってはこれらの記事を参考にしようと思いましたが、どちらもdeviseですでにwebを実装していて、そのあとアプリ化するという私の状況とは異なります。認証API私のような状況での実装方法が書かれた記事があまり見当たらなかったので今回ここに残そうと思います。config/routes.rbGitHubのマニュアルに書いてある通りにこのコマンドを打ったはいいのですが、すでにdeviseを導入しているのでUserモデルはあるんですよね。このままマイグレートしても失敗するのは目に見えてます。したらいいのか、ここで数時間詰まりました。マニュアルをみるとしっかり書いてありました。table言われた通りにやりましょう。falseendここはよくわからないのですが、私の場合はもともとコメントアウトされてました。:usersを先に書いてねと言っています。authによって自動的に挿入された以下の部分のコメントアウトも忘れずに。'auth'#次に2のほう。table](https://devise-token-auth.gitbook.io/devise-token-auth/faq#i-already-have-a-user-how-can-i-add-the-new-fields)ここにさきほどの私の「すでにUserモデルがあるけどどうするの?」という懸念を解決してくれる方法が書いてあります。db/migrate/20180401103356_devise_token_auth_create_users.rbの中身を消し、リンク先(以下)のコードで置き換えればOK。falsefalseにしましょう。コメントアウトもしくはtrueだとリクエストのたびにトークンが変わってしまうので、今回はfalseにしておきます。これで準備完了のはずです。試しにログイン用のAPIを投げてみましょう。#リクエストを投げてみる※すでにemailがhoge@example.compasswordがhogehogeのユーザーがいる前提です。・devise_token_authでのログインエンドポイントは/api/v1/auth/sign_inです。ここ宛にPOSTします・json形式でリクエストを投げるのでcontent-typeはapplication/jsonにしてください・リクエストボディとしてemailとpasswardを設定してください。これでリクエストを投げます。するとステータスコード200でレスポンスが返ってくるはずです。レスポンスヘッダーに認証情報が含まれて返却されます。この中の・access-token・client・uidを次回からのリクエストヘッダーに入れてあげることで認証が実現します。:authenticate_user!やcurrent_userが使えて便利です。#さいごにあまりにdevise_token_authを使った例が少なかったので、そもそもdeviseですでにwebを実装していて、そのあとアプリ化するという状況においてこのアプローチは間違ってるのかな?とも考えてしまいます。いい方法があればぜひ教えて頂きたいです。