質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Unity

    3988questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Firebase

    604questions

    Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

  • Authentication

    86questions

    Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Unity×Firebase Authenticationでログインしたユーザーをアプリを再起動したときも、ログインさせたままにしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 249

kazuh1r010

score 9

現在、ユーザー登録ができるスマホアプリを作成しております。

Unity × Firebase Authenticationで実装しており、
ユーザー作成、ユーザーサインインまでは、できました。
ただ、一度アプリを停止したあと、立ち上げた場合で、
サインイン済みのユーザーは、ログイン状態で起動したいのですが
実装の方法は、どういった手法を使うのがよろしいのでしょうか?

Web系では、セッションやクッキーで情報が多いのですが
情報が少ないため、調べた限り分かりませんでした。

firebase公式HPで

ユーザーがアプリにログインしたら、そのユーザーのログイン認証情報(たとえば、ユーザー名とパスワード)を認証サーバーに送信します。
サーバーにより認証情報が確認され、認証情報が有効な場合は、カスタム トークンが返されます。
認証サーバーからカスタム トークンを受け取ったら、Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync に渡してユーザーのログインを行います。

となっているので、ユーザー管理が楽なfirebaseでもログイン継続には、認証サーバー設計が必須なのかなとは感じています。
(PythonやAWS、GCPが少し使えるのでその範囲でできれば有難いです)

一応試験的に、サインイン時に発生するトークンを取得してjsonで保存し、
再起動後に読み込み、以下のコードでできるか試したのですが、
それだけでは、"task.IsFaulted"が返って来てしまいサインインできませんでした。
ただ、トークンを送信するだけでは、サインインできない仕様なのかも疑問です。。
(この方法は、セキュリティ的に恐らく良くないのではとは思ってますが..)

参考https://firebase.google.com/docs/auth/unity/custom-auth?authuser=0

 JSONObject json = new JSONObject(data);
 string custom_token = json.GetField("idToken").str;

 auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
    if (task.IsCanceled)
       {
          Debug.LogError("SignInWithCustomTokenAsync was canceled.");
           return;
         }
      if (task.IsFaulted)
        {
           Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception);
           return;
        }

   Firebase.Auth.FirebaseUser newUser = task.Result;
   Debug.LogFormat("User signed in successfully: {0} ({1})",
   newUser.DisplayName, newUser.UserId);
        });

一応開発環境ですが
Unity 2018 1.1f1
android (将来的にiosも視野に) 使用環境想定
windwos10

になります。

どなたかお分かりの方、いらっしゃいましたら
ご教授よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sakura_hana

    2018/06/05 11:43

    大丈夫か大丈夫でないかで言えば、完璧に守ることは不可能だと思います(ハッキングと対策はイタチごっこの為)。ただトークンがログイン毎に変わるとすればログイン用のIDとパスワードをそのまま保存するよりは安全かと。他にもトークン保存時に暗号化する、jsonファイルをなるべく隠蔽する、端末固有IDを作成/保存しておいてログイン後に検証する(普段と違う端末でログインするとアラートを出すとか)、万一不正ログインされた時に対応出来るようサーバー側にこまめにログを残す等の対策が考えられます。

    キャンセル

  • kazuh1r010

    2018/06/05 11:49

    完璧には守れないものなんですね、勉強になります。対策例もあげていただきありがとうございます。参考にさせていただきます!

    キャンセル

  • sakura_hana

    2018/06/05 20:04

    Androidは非常にガバガバなので……Unityに限らず、一般的なアプリのハック対策を調べてみるとよいと思います。また、解決したなら自己解決として回答の投稿をお願いします。

    キャンセル

回答 1

check解決した方法

0

解決したので、こちらにも改めて記入させていただきます。
上記質問への追記覧でsakura_hanaさんにサポートしてもらったので、
本来ならばそちらをベストアンサーにしたいところですが、
他に同じ悩みをお持ちの方がいらっしゃった場合を想定して、記入させていただきます。

私が解決した方法として、Unityエディタ上では、Firebaseから取得したトークンで再ログインできなかったので、android実機で動作確認したところ、実行できました。

セキュリティ部分に関しては、上記の質問追記修正覧でご確認いただければと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Unity

    3988questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Firebase

    604questions

    Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

  • Authentication

    86questions

    Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

  • トップ
  • Unityに関する質問
  • Unity×Firebase Authenticationでログインしたユーザーをアプリを再起動したときも、ログインさせたままにしたい