【SwiftUI】とDjango-REST-Framework(Django-AllAuth)でユーザー登録機能の実装

この記事では、SwiftUI、Django-REST-Framework、Django-AllAuthを利用してユーザー登録機能を実装する方法を紹介します。

 

◆動作検証環境

・ローカル環境:mac Catalina
・XCode:12.1
・Django:3.1.2
・django-allauth:0.43.0
・DjangoRESTframework: 3.12.1
・django-rest-auth: 0.9.5
今回の記事ではバックエンドにDjangoRESTframeworkのプロジェクトを利用しています。
本記事で利用しているものと同じプロジェクトの設定方法等は、下記の記事で紹介しています。
なお、SwiftUIの基本的な文法等については、解説していません。
スポンサードリンク

ユーザー登録画面の構成と動作内容

 

まずは、iOSアプリのユーザー登録画面を作成します。

 

ユーザー登録画面構成の内容は以下のとおりです。

  • email入力欄
  • パスワード入力欄
  • 確認用パスワード入力欄
  • 登録ボタン

ユーザー登録画面構成の内容は以下のとおりです。

 

動きとしては、email、パスワードを入力し登録ボタンをタップ。

  • 入力が正しければ、sheetを出し確認用メール送信を知らせる
  • 入力が正しくなければ、alertを出し不備に内容を知らせる。

入力のバリデーションは、django-rest-framwork側で行い、エラーがある場合は、responseのメッセージをalertで表示させます。

 

ユーザー登録画面のコーディング

 

ContentViewで表示させるユーザー登録用画面のstructは以下の内容です。

SignUpView

 

ポイントとなる点は以下のとおりです。

その①:

6行目:@EnvironmentObject var accountAPI: AccountAPI

API接続をするメソッドを持ち、ObservableObject プロトコルに適合するAccountAPIクラスを、@EnvironmentObject として定義します。

 

その②:

47行目:accountAPI.makeRegistration(email: eMail, password1: password1, password2: password2) 

登録ボタンがタップされた時に入力したemailアドレスと、パスワードを渡しaccountAPI.makeRegistrationメソッドを実行します。

 

その③:

56行目:alert(isPresented: $accountAPI.isAlertSignUp)accountAPI.makeRegistrationメソッドを実行した際に入力に不備があった際にalertとしてエラー内容を表示します。

 

その④:

66行目:sheet(isPresented: $accountAPI.isSentEmailView)accountAPI.makeRegistrationメソッドを実行し入力が正しい場合は、確認用メールを送信した内容で表示します。

SentEmailSheet という名前のstructとして別ファイルで作成しています。

 


SentEmailSheet.swift

 


AccountAPI.swift

 

ポイントとなる点は以下のとおりです。

5行目:

ObservableObjectプロトコルに適合させ、クラスメンバーにPublishedアノテーションを仕様する

 

14行目:

ユーザー登録のためにAPI接続を行うmakeRegistrationメソッドを定義(rest-authの仕様に基づき必要な値を引数で受け取る)

 

27行目:

rest-authの仕様に基づきエンドポイント(アクセス先URL)を設定

 

33、34行目:

rest-authの仕様に基づき、HTTPメソッドとHTTPボディを設定

 

51、57行目:

jsonObject()メソッドを実行した際の返り値を取得、その内容を確認

 

60、68、76、84行目:

jsonObject()メソッドを実行した際の返り値から、email,password1,password2,non_field_errorsのメッセージを項目ごとに取得。

メッセージがない場合はOKを入れる。

 

95、101行目:

statusコードの取得

 

103行目から:

statusコードを基にサインアップ画面の表示の動作の値を準備

201番の場合、登録成功用のSheet用のフラグをTrueにする

201番以外の場合、エラーメッセージを@Publishedで定義している変数に入れ、入力ミスを知らせるためのalertのフラグをTrueにする

ユーザー登録のため処理の完了確認のStatusコードは200 OK ではなく201 Created の指定とします。

 

@Publishedアノテーションで定義した変数をバックグラウンドで変更する事は許可されていないため、DispatchQueue.main.async を利用して行うようにします。

 

バックグラウンドで行うと下記のような警告が現れます。

 


ContentView.swift

 

ポイントとなる点は、6行目と11行目です。

ObservableObjectを継承しているAccountAPIクラスを@ObservedObjectアノテーションを利用し、変数にとりbodyの中に、environmentObject(accountAPI)として利用しています。

 


 

以上、SwiftUI、Django-REST-Framework、Django-AllAuthを利用してユーザー登録機能を実装する方法を紹介しました。