みなさんさようなら. またいらんものを作りましたぞ.
django-allauth
djangoで作ったアプリケーションのログインにOAuthを使いたいとき,いくつか提供されているライブラリがあるのだけれど,django-allauthというのを使っている.
で,今回,俺以外誰も使わなそうなサービスを作る上で,はてなログインをやりたいと思ったんだけど,当然そんなものがdjango-allauthのproviderとして用意されているはずもなく…….
仕方ないので自作した.
django-allauth-hatena
本当に今どきはてなアカウントでのログインを作るサービスがあるのか謎なんだけど.
だいたい普通のdjango-allauthのprovidersと同じように扱えます.
ちゃんとPyPIにも登録したので,pipでインストールできるよ.
注意点として,scopeの設定があるのだが,
SOCIALACCOUNT_PROVIDERS = { 'hatena': { 'SCOPE': ['read_public,write_public'] } }
allauthはscopeが複数指定されていた場合,スペース区切りでscopeを連結してリクエストに渡す.
しかし,はてな側は
http://developer.hatena.ne.jp/ja/documents/auth/apis/oauth/consumer
「,」区切りで渡せと仰せのようで,これに合わせるために上記のようなscopeの指定をしてやる必要がある.普通に配列で渡すとハマる.
あと,allauthこういう設定ミスでエラーがでたときに,プロバイダ側のサーバからのエラーを一度握りつぶして,AuthenticationError
を返してくれるので,何が問題で失敗したのかわからない.
せっかくはてな側は認証エラー一覧を見せてくれているのに.
OAuth 認証時のエラー一覧 - Hatena Developer Center
参考
allauhtを普通に使ったり,普通にAuthentication Backendを紹介する記事はあったのだが,Authentication Backendを自作する記事は全然見つからなかった.
こちらがかなり参考になった. マジ感謝.