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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Firebase

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Authentication

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

Q&A

解決済

1回答

1508閲覧

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

kazuh1r010

総合スコア23

Firebase

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Authentication

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

0グッド

1クリップ

投稿2018/06/04 12:30

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

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

C#

1 JSONObject json = new JSONObject(data); 2 string custom_token = json.GetField("idToken").str; 3 4 auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => { 5 if (task.IsCanceled) 6 { 7 Debug.LogError("SignInWithCustomTokenAsync was canceled."); 8 return; 9 } 10 if (task.IsFaulted) 11 { 12 Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception); 13 return; 14 } 15 16 Firebase.Auth.FirebaseUser newUser = task.Result; 17 Debug.LogFormat("User signed in successfully: {0} ({1})", 18 newUser.DisplayName, newUser.UserId); 19 });

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

になります。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2018/06/05 02:17

jsonから取り出したトークンの値が正常であることは確認出来ていますか?(恐らくログインの度に違うトークンになっているが正しくjsonで保存・取り出し出来ているか)
kazuh1r010

2018/06/05 02:29 編集

情報を更新できておらず、すみません。上記の質問時は、Unityのエディタ上で動作確認していたので、もしかしたらとandroid実機で、サインイン→アプリを終了→アプリ起動→保存してあるJsonでトークンを取得 したところ、ログイン出来ておりましたので、その部分は解決できました。ただ、トークンをアプリ自体に保持しておくことが大丈夫なのか心配ではあります。。
sakura_hana

2018/06/05 02:43

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

2018/06/05 02:49

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

2018/06/05 11:04

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

回答1

0

自己解決

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

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

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

投稿2018/06/05 11:37

kazuh1r010

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問