この記事では、SwiftUIと、Django Rest Framework、Django Rest Authを利用するプロジェクトで、user_idを取得する方法を解説しています。
各ユーザーごとにアカウントを作成するアプリや、WEBシステムでは、ユーザーごとに表示や、使用できる機能を選択する必要があるため、利用ユーザーのIDなど一意の情報を利用する方法がとられます。
今回は、Django側で作成されるIDを利用する方法を紹介します。
◆動作検証環境
・XCode:12.1
・SwiftUI:2.0
・django-allauth:0.43.0
・DjangoRESTframework: 3.12.1
・django-rest-auth: 0.9.5
- ①Django側でID取得用のエンドポイントの作成
- ②SwiftUI側でID取得用のコードの実装
Django側でID取得用のエンドポイントの作成
まず、バックエンド側でIDを提供するためのエンドポイントの実装が必要です。
Django Rest Framework、Django Rest Authでの実装方法はこちらの記事を参考にしてください。
user_idを取得する方法【 Django Rest FrameworkとDjango Rest Authの場合】
SwiftUI側でID取得用のコードの実装
続いて、SwiftUI側でID取得用のコード実装を行います。
IDの取得の実装でも、通常のAPIのGET接続の方法と変わりません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | func makeGetCallUserId() { var statusCode:Int? var id:Int? var userName:String? let endpoint: String = "https://Sample.com/api/user/" guard let url = URL(string: endpoint) else { print("Error: cannot create URL") return } var urlRequest = URLRequest(url: url) urlRequest.addValue("token \(self.tokenKey)", forHTTPHeaderField: "authorization") // set up the session let config = URLSessionConfiguration.default let session = URLSession(configuration: config) // make the request let task = session.dataTask(with: urlRequest) { (data, response, error) in // check for any errors guard error == nil else { print("error calling GET") return } // make sure we got data guard let responseData = data else { print("Error: did not receive data") return } // parse the result as JSON, since that's what the API provides DispatchQueue.main.async { do{let recievedId = try JSONDecoder().decode([UserId].self, from: responseData) id = recievedId.first!.id userName = recievedId.first!.username }catch{ print("Error: did not decode") return } } guard let response = response as? HTTPURLResponse else { print("Error: did not response data") return } print("The response code is \(response.statusCode)") statusCode = response.statusCode DispatchQueue.main.async { if statusCode == 200{ self.id = id! self.userName = userName! self.isLogin = true } } } task.resume() } |
ポイント
3,4,5行目:
ID取得に必要な変数を定義します。
statusCode:Int? API接続、データの情報が正しく行われた事を判断するために、ステータスコードを利用します。
id:Int? , userName:String? このコードでは、idと同時にユーザーネームも取得する内容となっています。
35行目:
API接続で入手したJsonデータをデコードします。
入手元のデータに対応するModelを作成し、decodeの際に利用します([UserId])。
UserIdのStruct は以下のように作成しています。
1 2 3 4 5 6 | struct UserId: Codable { var id:Int var username:String } |
ID取得後の利用方法
アプリ等を利用する際に、ユーザーが一度ログインをすると、その後利用するユーザーidはログアウトするまで変わりません。
そのため、その後のAPI接続の度に、idを取得する事は効率が悪いです。
ログイン完了後1度のみidの取得を行い、ログイン中のフラグのようにユーザーデフォルトなどで値として保持する方法が良いでしょう。
以上、SwiftUIと、Django Rest Framework、Django Rest Authを利用するプロジェクトで、user_idを取得する方法を解説しました。