Skip to content

Repository files navigation

概要

key-value ペアをクラウド(google driveのappdataスペース)上に保存するモジュールです。local storageと同様の手触りで使用できるようなインターフェースを作成しました。

シ楽バスのユーザーデータをクラウド上に保存することを目標に作成しました。

demo

https://syllabusbackend.onrender.com/

image

最上段のkeyとvalueフィールドに何か入力しsetボタンをクリックすることでkey-valueペアが保存されます。 中段は保存されたkey-valueペアを検索することができます。 下段はkeyを指定してデータを削除することができます。keyが存在し正しく削除された場合はtrue、削除できなかった場合はfalseが表示されます。

この例はreact+typescriptのものですが、純粋なhtmlでモジュールを使用する例も「html-sample」に挙げています。ただしapikeyなどの環境変数を省いているため動作しません。html-sample/build/index.js で使用感を確認できると思います。

このdemoのデータを削除する

https://drive.google.com/drive/settings

にアクセスし、SyllabusBackendをドライブから切断してください。 image

Auth

key-valueペアはシリアル化され、ユーザーのgoogle driveのappDataFolder下に保存します。このサービスがユーザーのドライブにアクセスすることを承認してもらうためOAuthの手順を踏ます。 この際、このサービスがユーザーデータのどこまでアクセスする予定かを示す必要があります。この範囲(スコープ)はauth/drive.appdataに設定しており、サービス専用のフォルダをユーザーのGoogleドライブに作成することが可能になります。

image

このスコープは「非機密のスコープ」に分類されておりリリースの際Googleの審査を受ける必要がない一方、専用フォルダの外(例えばマイドライブ)にアクセスすることはできません。

モジュールの仕様

DriveModuleクラスに主要なメソッドが定義されています。

  • async setItem(key: string, value: string): Promise<void|err.ErrorInfo> key, valueのペアを保存する非同期メソッドです。例外が発生した場合はErrorInfoのインスタンスが返ります。keyを空文字にすることはできません(ErrorInfoインスタンスが返ります)。
  • async getItem(key: string): Promise<string | undefined | err.ErrorInfo> keyを指定してvalueを取得する非同期メソッドです。keyが存在した場合は結果が文字列で返されます。存在しない場合はundefined、例外が発生した場合はErrorInfoのインスタンスが返ります。
  • async removeItem(key:string): Promise<boolean|err.ErrorInfo> keyを指定してkey, valueペアを削除する非同期メソッドです。keyが存在した場合は削除しtrueを、存在しない場合は何もせずfalseを返します。エラーの場合はErrorInfoのインスタンスを返します。
  • async clear(): Promise<void|err.ErrorInfo> ユーザーデータのファイルを削除する非同期メソッドです。 ErrorInfoの型ガードにはIsError関数を利用してください。

 実際の利用はsrc/App.tsxを参考にして頂けたらと思います。

Cookie

google のアクセストークンは1時間で期限切れとなります。通常はリフレッシュトークンを用いてトークンの更新を行うのですが、これにはclient secretを用いてauthを行う必要があります。これには別に認可サーバー or firebaseなどのサービスを使う必要があります。そのためこのモジュールだけでは1時間ごとに認証が要求されてしまいます。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages