能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

Parse Code=206 "Insufficient auth." - ParseServerを構築した話

Parse PlatformもしくはParseServer で記述していたコードが動かなくなった際の対処メモ。

ParseServerはFirebaseに代表されるmBaaSの先駆けとして登場したparse.comをオープンソース化したものでモバイル向けのSDKとサーバーサイドのNodeJSで構成されたサービスとなっている。

mBaaSについて話すと、mBaaS(mobile backend as a service)というキーワード自体が2010年後半に注目されたがモバイルアプリが一定の評価に収まった2021年現在はFirebase、iCloudぐらいしか残っていない。ParseServerの仕様を踏襲したサービスとしてはニンフティクラウドがある。

先駆けとなったParseServerが知られていないのはサービス自体がクローズしたため現在はオープンソースコミュニティの管轄となっている。

本来のサービスクローズの原因は多くあるとは思うが私見としてはparse.comがある技術に依存気味であったことが技術的に足を引っ張っているという印象がある。ある技術とは2010年代に登場したmongoDBであり、機能の多くをmongoDB由来の機能をそのまま使っていた(オブジェクトのリレーショナル機能などに伺える)。

2010年台のmongoDBはリレーショナルデータベースに比べてメモリ使用量が大きくなる傾向があったりとmongoDBの性能向上にサービスにかかる費用に対して売り上げが芳しくなった。歴史としてはベンチャーとして始まったparse.comhはFacebookに買収、売り上げ芳しくなかったparse.comのサービスをクローズしオープンソースとして公開され2021年に至る。

閑話休題、以前に作成したPaerseServerのコード(アプリ、サーバーサイド)が交互に動く途中でInsufficient auth. というエラーメッセージが表示されることがあった。

Parse Code=206 "Insufficient auth."

認証周りのエラーとなっている原因が発生したのはPaerseServerでユーザーのレポジトリおよびユーザー認証を担当するUserオブジェクトで発生していた。要は利用者がアクセス可能と思われているUserが処理のタイミングで利用者でも非認証となる問題が発生していた。

原因を追跡したところ、CloudCode(サーバーサイドで呼び出JavaScript)上に問題を発見した。Userのアクセス許可を行うためのオブジェクト(ACLオブジェクト)を使用してアクセス可能な範囲を調整していたが、アクセス許可の際に自分自身を含めないといけない仕様になっていた。

  let currentUser = request.user
	let aCL = new Parse.ACL(currentUser)

上記コードでACLオブジェクトを生成する際にユーザーオブジェクトを渡しておく必要があった。

Note: PaeseServerコミュニティを随時見ていれば把握できる仕様変更だったがそこまで関心を向けることができていない状況で仕様変更があると厳しいものがある。 ParseServerのコミュニティもそこまで大きくないので問題があった場合にWeb検索から問題を解決できる情報を探すことも難しい場合がある。