8_Django REST framework入門 ~LoginAPIの作成~

Django REST framework
とんぺい
とんぺい

師匠こんばんは〜!

今日もDjango REST frameworkの続きを勉強しに来たブゥ〜!

師匠
師匠

とんぺいくん、こんにちは。前回はUserProfileAPIについて学習したね。今回は、LoginAPIを作成して、自身のプロフィールのみ更新を行えるようにToken認証の機能を実装しよう。

とんぺい
とんぺい

Token認証とはなんだか難しい言葉だブゥ!

まずはToekn認証の解説からお願いします!

注意

  • コード中に[という文字列がありますが、これは [ が文字化けしたものです。
  • 今後修正法が判明次第修正いたします。

Django REST framework入門一覧

ソースコード

Token認証とは

師匠
師匠

Token認証とは、その言葉通りTokenを用いて認証を行う認証方式のことを言うよ。とんぺいくんは「認証」という言葉がどういう意味か理解できているかな?

とんぺい
とんぺい

う〜ん… そう言われると「認証」という言葉の定義が曖昧だったブゥな…「認証」ってどういう意味なんだブゥ?

師匠
師匠

「認証」とは、対象の正当性や真正性を確かめることを言うよ。簡単に説明したら「本人確認」を行うということだね。

とんぺい
とんぺい

ふんふん。「認証」=「本人確認」ということだブゥね!

そして、その「本人確認」を「Token」というものを使って行うのが「Token認証」… 「Token」ってなんだブゥ?

師匠
師匠

「Token」とはWebサービスを利用する際に、Webサーバーがユーザーを認証するために払い出した認証情報のことだよ。簡単に言うと「本人確認」を行うための「IDカード」みたいなものだね。

とんぺい
とんぺい

ほぅほぅ。つまり、「Token認証」というのはTokenという自身に関する情報を持った「IDカード」を利用して「本人確認」を行うと言うことだブゥね!

師匠
師匠

その通り。この仕組みがないと、悪意のあるユーザがAPIを通してサービスを利用しているユーザの情報を盗むことができたり、勝手に他人のデータを改ざんすることができるんだ。

とんぺい
とんぺい

それは危険だブゥね!

Webサービスを運営するなら、この「認証」の仕組みは絶対必用だブゥ!

Token認証のフロー

師匠
師匠

今回は、上図で示したフローでユーザーがTokenを取得し、自身のユーザ情報を変更できるように、Token認証の実装を行っていくよ。

とんぺい
とんぺい

ふんふん。ログイン時にTokenを発行して、そのTokenをリクエストのHeaderに持たせることで、ユーザの認証が行われるんだブゥね!

LoginAPIの実装

師匠
師匠

Token認証のフローを理解できたところで、ユーザがログイン時にTokenを発行できるように、LoginAPIを実装しよう。

profile_apiviews.pyを開こう。

とんぺい
とんぺい

views.pyの修正が終わったブゥ!

あっという間にできて、びっくりしているブゥ〜!!

たった2, 3行でToken認証の実装ができてしまうんだブゥね!

師匠
師匠

私は覚えた当初は驚いたよ。手順としては以下のようになるよ。

  1. Token認証を用いるViewで認証方法を定義
  2. ObtainAuthTokenを用いてLoginAPIViewの作成
  3. ブラウザでログインの確認ができるようrenderer_classesの設定
とんぺい
とんぺい

 認証周りはもっと苦労すると思ったけど、フレームワークってすごいんだブゥね〜!一旦フレームワークで開発を始めたら、フレームワークなしで開発はできないブゥ!

師匠
師匠

そうだね。現代においてフレームワークを使わないでWebサービスを作るほうが珍しいくらいだ。では、Viewの設定がうまくいったら、次はURLの設定をしよう。

URLの設定

とんぺい
とんぺい

この辺はもうなれてきたブゥ!

urlpatternsの中に、'login/'という名前でviews.UserLoginApiView.as_view()を指定すれば良いブゥね!

師匠
師匠

その通り。

Viewの作成とURLの設定は、セットで行うと覚えておこう。

では、http://localhost:8000/api/login/にアクセスしてみよう。

とんぺい
とんぺい

無事に表示されたブゥ!

画面のUsernameというのは登録したemailを入力すれば良いブゥか?

師匠
師匠

そうだね。少し紛らわしいがmodels.py

USERNAME_FIELD = 'email'と記述してあるので、Usernameの欄には登録したemailを入力しよう。
とんぺい
とんぺい

おっ!!

Tokenが表示されているブゥ!!

師匠
師匠

LoginAPIの実装はうまくいったようだね。では、Requestのheaderに仮想的にtokenを持たせるために、ModHeaderをChromeの拡張機能にインストールしよう。インストールできたら、下図のようにTokenの設定をしよう。

とんぺい
とんぺい

ModHeaderのNameの欄に 「Authorization」、Valueの欄に「Token 発行されたtoken」だブゥね!

うん!設定できたブゥ!

師匠
師匠

では、各URLにアクセスして表示内容の違いを確認しよう

  • http://localhost:8000/api/profile/1/
  • http://localhost:8000/api/profile/2/
とんぺい
とんぺい

僕のプロフィールの方だけ、PUTメソッドや、DELETEメソッドが実行できるようになっているブゥ!

これがToken認証だブぅね!

まとめ

師匠
師匠

それでは本日はここまで。今日は以下の点について学習したね。

  • 認証
  • Token認証
  • LoginAPIの実装
とんぺい
とんぺい

うん!Webサービスを作成する上では、認証がすごく大切ということがわかったブゥ!Django REST frameworkでは、簡単にToken認証の実装もできるのがすごいブゥね!

師匠
師匠

本当にフレームワークを作った人には感謝しかないね。

次回は、Userのmodelに関連付けた、UserProfileFeedAPIというものを作成しよう。それでは、また次回。

参考

コメント

  1. […] 8_Django REST framework入門 ~LoginAPIの作成~ (6/2公開) […]

タイトルとURLをコピーしました