2022年2月28日こんにちは、MSKです。出退勤のバックエンドを作ったので、フロント側を作っていましたが認証関係でSessionIDを取得しないと作れない部分があり、dj_rest_authをやめてJWTに変更します。関連する記事は以下になります。この記事はここ!スポンサーリンクdj_rest_authだとできなかったこと出退勤のアプリでは出退勤の時間とユーザー情報を紐づけています。出退勤のAPIを叩く時に、ログインしているユーザーのIDが必要になります。実現したかったことはログイン時に渡されるkeyを使ってユーザー情報(ユーザーのID)を取得するというものです。IDを取得する方法を検索しているといくつかの記事がでてきました。IDを取得することはやめました!ユーザー全体を取得することはできるので、ユーザー全体を取得して、usernameで検索かけて取得することも考えました。今回は自分のために作るのでユーザーは基本自分だけなので、「まぁ、しょうがないかな」とも考えましたが、この後サービスをどんどん作っていきたいと考えているのであんまり妥協をしないことにしました!ということで、dj_rest_authを使わないことにしました。dj_rest_authと同じように認証ができて、ログインしているユーザー情報が取れるdj_rest_authの代わりを探す必要があります。Token)を使うべしという記事もあったのでJWTについて調べて、そっちに切り替えることにしました。JWTをインストールします。JWTを使えるようにsettings.pyを次のように変更します。timedelta(minutes=30),}認証機能を使えるようにurls.pyを次のように変更します。path('authen/',include('djoser.urls.jwt')),あとはrunserverして動作を確認します。JWTの動作確認postmanでhttp://127.0.0.1:8000/authen/jwt/createにPOSTします。refreshとaccessのトークンが返ってきます。accessトークン」の形で使い認証を行います。accessトークンは設定した時間で期限切れとなるので期限が切れたらrefreshトークンを用いて、http://127.0.0.1/authen/jwt/refreshにPOSTすることでaccessトークンの更新をすることができます。ログインユーザーの情報を取得するやりたかったログインユーザー情報を取得するためのAPIを作成します。views.pyに次のクラスを追加します。status=status.HTTP_400_BAD_REQUEST)RetrieveUpdateAPIViewは特定のオブジェクトを検索して返す機能に使います。今回はログインしているユーザーを返します。urls.pyに登録して動作確認します。path('loginuser/',LoginUserView.as_view(),name='loginuser'),runserverして動作を確認します。postmanでhttp://127.0.0.1:8000/authen/jwt/createにPOSTしてaccessトークンを取得します。その後、HeaderのAuthorizationに取得したaccessトークンをセットして、http://127.0.0.1:8000/loginuser/にGETを行います。次のようにユーザーIDとユーザー名が返されました!最後にログインしているユーザーの情報を取るということが認証をJWTに変えて実現することができました。ユーザー情報も取れるようになったのでフロント側から出退勤のAPIを呼ぶことができます。次からReactでフロントを作って行きます。最後までご覧いただき、ありがとうございました。「出退勤アプリのDjangoの認証をJWTに変更!」でした。MEMSK九州在住の組み込み系エンジニアです。2児の父親でもあります。数学やプログラミングが趣味です。最近RustとReact、結び目理論と曲面結び目理論にはまっています。Pythonエンジニア認定基礎試験を受けてみて!組み込み系エンジニアMSKソフトウェア関連の技術が好きな30代男性です。最近は、Webアプリ開発にチャレンジ中。