ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

会員管理のセッション切れに対応したコードの書き方(JavaScript)

f:id:mbaasdevrel:20171212211252p:plain

会員管理のセッションは最長でも7日間となっています。そのため、ログインしてから7日間経つとセッションが無効になります。とは言え、セッションIDはアプリ側で保持しているため、セッションIDの有無だけでログイン状態を判断すると、検索や保存時にエラーが起こるようになります。

そこでアプリの起動時にセッションの有効期限をチェックする方法を紹介します。今回はJavaScript SDKを使います。

有効期限をチェックするコード

まず現在のユーザ情報を取得します。

let user = ncmb.User.getCurrentUser();

次に、そのユーザ情報を使って自分自身の情報を取得しようとします。もしセッションの有効期限が切れていると、エラーになります。そこで try 〜 catch を使ってエラーを捕捉します。

try {
  await ncmb.User
    .equalTo('objectId', user.get('objectId'))
    .fetch();
} catch (e) {
  // セッションの有効期限切れ
  user = null;
  localStorage.removeItem("NCMB/"+ncmb.apikey+"/currentUser");
}

セッションの有効期限が切れていると、ログアウト処理(ncmb.User.logout)も失敗します。そのため、直接localStorageにある情報を削除します。

後はユーザ情報の有無を確認して、匿名認証や認証画面を出すという流れになります。

if (!user) {
  await ncmb.User.loginAsAnonymous();
}

全体としては次のようになります。async/awaitを使っているので、全体をasyncで囲んでいます。

(async () => {
  let user = ncmb.User.getCurrentUser();
  if (!user) return; // 未認証であれば終了
  
  try {
    // 会員情報の取得を試みる
    await ncmb.User
      .equalTo('objectId', user.get('objectId'))
      .fetch();
  } catch (e) {
    // セッションの有効期限切れ
    user = null;
    localStorage.removeItem("NCMB/"+ncmb.apikey+"/currentUser");
  }
  // 必要な処理があればここ
})();

この処理をアプリの起動時、再開時に行っておくことで、認証状態の確認を行えるようになります。

まとめ

データを実際に投稿してみてエラーが出たら認証エラーとすることもできますが、ユーザビリティは高くありません。事前に分かるのであれば、それを事前に確認する方がいいでしょう。

localStorageのデータを削除しておけば、会員情報は取得できなくなります( ncmb.User.getCurrentUser() が空になります)。そうすれば認証状態の判定も難しくないでしょう。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。