質問: 現在iosのアプリを作っているのですがログインの機能を実装するにあたってどういうフローにしたらいいのかわからないのでご教授頂きたいです。 現在のフローは ★アプリ側 ユーザー新規登録 id password をサーバーに送信し新規ユーザー登録 サーバー側でidとパスワードをDBに保持 パスワードはハッシュをかける ★アプリ側 ログイン idとパスワードを入力しサーバーに送信しidとパスワードが正しければログイン アプリ内にログイン状態を保持 ★アプリ側 ログアウト アプリ内にログインの状態を破棄しログアウト状態にする という感じなのですがどうでしょうか?? 宜しくお願い致します。
回答: ログインが必要なアプリということは、ログイン後にユーザに紐付いたデータを取得する通信をアプリとサーバで通信を行いますよね?今のままだと、ログイン後にアプリからサーバへ投げるリクエストに付加することができる情報はidかパスワードくらいで、毎回毎回それを投げてユーザが正しいかどうか判断する事になると思いますが、それでよいですか? 例えばログイン後にユーザの情報を受け取るリクエストがこんなかんじのものだったとします。 http://example.com/status?id=XXX&password=YYY これだとアプリが起動している間、常にメモリ上に常にパスワードを維持しなければならないので、あまり良くないと思います。 こういう「ログイン」という行為は、たいていログイン成功時にアクセス用のトークンと呼ばれるものをサーバ側で発行し、アプリに返すのが常套だと思います。ログイン後はそのトークンを用いてサーバへリクエストを投げます。サーバ側はそのトークンが有効であるかどうかを判断し、問題がなければ正常なレスポンスを、問題があればエラーを返すことで、不正なアクセスを防止できます。 http://example.com/status&token=XXXXXXX トークンには有効期限、アクセス元制限をかけることで、他者にトークンが漏洩しても外部から不正にアクセスすることを防ぐ仕組みを設けることができます。(もちろんその実装は自分次第ですが) ログアウト時に、サーバへ該当のトークンを破棄する処理を実行すればなおよしです。アプリが強制終了してログアウトできなかったときも、有効期限が切れればそのトークンは無効になるので大丈夫です。