React Native
...
Relay (GraphQL)
Users

React NativeとRelayを用いたBack4Appユーザー認証

15min

Relayを使用したReact Native認証

はじめに

GraphQL APIを使用して、ユーザーがサインアップまたはログインした後、いつでもログインしたユーザーを取得するために使用できるセッショントークンを受け取ります。セッショントークンはRelayミューテーションから来ます。これらのRelayミューテーションの例は、前のガイドの中にあります。サインアップ または ログイン.

セッショントークンの値は現在のセッションを表し、ユーザーが認証されているかどうかを制御します。認証の瞬間に、この値はヘッダーパラメータに設定される必要があります。Relayでは、ヘッダーパラメータを処理するためにEnvironmentを使用するので、このファイル内にセッショントークンを挿入する必要があります。

ヘッダーにセッションを追加した後、各リクエストはBack4Appによって認証され、ユーザーはプライベートリソースにアクセスできるようになります。

いつでも、スタイルや完全なコードを確認するために、私たちのGitHubリポジトリを通じてこのプロジェクトにアクセスできます。

目標

ヘッダーパラメータにセッショントークンを使用して、Back4Appでユーザーリクエストを認証します。

前提条件

  • Parse Server バージョン 3.10 以上を使用して Back4App で作成されたアプリ。
  • 次を完了する必要があります:Relay 環境設定チュートリアル:
  • 次を完了する必要があります:Relay を使用した React Native ログインサンプル:
  • このチュートリアルでは、Expo を React Native フレームワークとして使用します;
  • このチュートリアルでは、Javascript をデフォルトの実装言語として使用します;
  • このチュートリアルでは、Async Storage を使用します;

1 - Async Storage をインストールする

チュートリアルを完了した後、 サインアップ または ログイン, アプリはセッショントークンを受け取ります。Async Storage を使用してトークンを保存しましょう。公式ドキュメントに従って、アプリに Async Storage ライブラリをインストールしてください。

Async Storage、Redux、またはお好みのローカルストレージソリューションを使用できます。この値が環境で利用可能であることを確認してください。

2 - トークンを取得する

次に、 最後のガイドコード を使用します。セッショントークンを取得し、この値を Async Storage を使用してアプリケーションに永続化する必要があります。

最初のステップは、Async Storage からセッショントークンを取得するための関数を環境ファイル内に作成することです。

非同期ストレージをインポートします:

JS


次に、関数を作成します:

JS


3 - クライアント側にトークンを保存する

では、サインインコンポーネントを改善して、useStateフックを使用して管理するのではなく、セッショントークンを永続化します。このコンポーネントは、セッショントークンが永続化されているため、アプリを再読み込みしてもログイン状態を保持します。

サインインコンポーネントを開きます。onSubmitのonCompleted内で、セッショントークンを非同期ストレージに保存し、次の結果を得ます:

次に、onCompletedを改善します:

JS


次に、SignInコンポーネントの宣言内で、セッショントークンのための新しいuseStateを作成します:

JS


コンポーネントがマウントされるたびに呼び出されるuseEffectを追加し、セッショントークンがあるかどうかを確認します(getSessionTokenを環境ファイルからインポートします:

JS


最後に、onCompletedを再度変更して、新しいuseStateを処理し、新しいコード行を取得します:

JS


ユーザーのログインに関するuseStateを削除し、以下の両行をそれぞれの場所から削除します:

JS


JS


アラートを避け、ユーザーの情報とトークンをuseStateに設定し、その後Async Storageにトークンを保存します。

if文を変更して、セッショントークンを処理します。

JS


4 - サインインコンポーネントの最終結果

すべての変更後、SignInコンポーネントは以下のようになります。

JS


5 - テスト

Sign Inコンポーネントの新しい変更をテストする時が来ました。誰もログインしていないことを確認するために、アプリケーションを終了して再度開いてください。

非同期ストレージをクリアすることも忘れないでください。次のメソッドを呼び出すことでできます。 AsyncStorage.clear() メソッドを使用して、実際の状態をクリアします。

再度ログインすると、次のメッセージが表示されます。



6 - リレー環境にセッショントークンを設定する

さて、アプリケーションのリクエストにセッショントークンをBack4App GraphQL APIに挿入しましょう。環境ファイルの中で、sessionTokenを取得し、それをヘッダーオブジェクトに追加します。ヘッダーの変数X-Parse-Session-TokenにsessionTokenを渡す必要があります。 ここでは、私たちがすでに作成したgetSessionToken関数を再利用します。

次に、fetchQuery関数の前に関数を作成し、以下のコードを貼り付けます:

JS


上記の関数は、セッショントークンが存在する場合のみそれを取得します。次に、それをヘッダーオブジェクトに追加し、分解します。

JS


ヘッダーのすぐ下に、リクエストを行うためのtry catchがあります。リクエストのHTTPステータスが401になる場合に処理するifをリクエストの後に設定しましょう。これは、実際のトークンがもはや有効でないことを意味します。したがって、ストレージをクリアし、現在のユーザーを終了します:

JS


今、あなたのアプリケーションはBack4Appバックエンドからプライベートリソースを取得し始めることができます。そして、セッショントークンが存在しない場合でも、私たちはそれを渡さないので、壊れることはありません。

ユーザーのために望ましいアクセスレベルを保証するために、セキュリティメカニズムを構成することを忘れないでください。アクセスをよりよく理解するために、リンクを参照してください セキュリティドキュメントからParse。

結論

このガイドでは、非同期ストレージを使用してセッショントークンを保存し、現在はログインしたユーザーが必要なリソースを取得し始めることができます。

次のドキュメントでは、ログインしたユーザーに関する情報を取得し、表示するためにuseStateを使用するのをやめるコンポーネントを準備しましょう。

ユーザーのサインアップについては、このチュートリアルのアプローチを使用してセッショントークンを処理できます。