10

自動ログイン機能を利用したいのですが。そのため、ユーザーがアプリを開くと、「ログイン画面」に委任されます。彼が正常にログインすると、彼は自分のアカウントに誘導されるはずです。これを「アカウント画面」と呼んでいます。これで、ユーザーがアプリを再起動すると、「ログイン画面」が表示されることなく、自分のアカウントに直接移動する必要があります。

ログイン機能は私のプロジェクトではすでに正常に機能しています(ユーザー名とパスワードはUserDefaultに保存されています)が、アプリを閉じるたびに、再度ログインする必要があります。だから私の質問は:ユーザーを自動ログインするにはどうすればよいですか?または、より適切に言うと、データ(UserDefaultに保存されている)がデータベース(MYSQL)と同じであるかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

23
  1. ユーザーがログインするときに初めて、ユーザーの資格情報をiPhoneのキーチェーンに保存します。
  2. アプリを再度開いたときに、ユーザーの資格情報がキーチェーンに存在するかどうかを確認します。存在する場合は、コードでログインロジックを呼び出し、自動ログインを実行して、ログイン画面の後に画面に移動する必要があります。いいえの場合は、ログイン画面を表示する必要があります。このロジックは、AppDelegatesapplicationDidFinishLaunchingで実行できます。
  3. ユーザーがログアウトボタンをクリックするたびに、最初にキーチェーンからユーザー資格情報を削除してから、ログインコントローラーに戻ります。

ユーザーがログインするときにログイン資格情報をキーチェーンに追加し、ユーザーがログアウトボタンをクリックしたときにのみそれを削除するだけです。ユーザーがログアウトせずにアプリを終了した場合でも、クレデンシャルはキーチェーンに残り、ユーザーがアプリに戻ったときにクレデンシャルを取得できます。

編集: もう1つ追加する必要があると思います..ログインロジックに時間がかかる場合(Webリクエストなどを使用してログインする場合など)、ApplicationDelegateではなくLogin ViewControllerにログインロジックコードを配置し、自動ログイン中にアクティビティインジケーターを使用します処理する。

編集:回答全体を編集し、NSUserDefaultをKeychainに置き換えました。このスレッドはその理由を説明しています。

于 2012-04-24T12:06:55.463 に答える
2

ユーザー名とパスワードを保存するときは、NSUserDefaultsではなくキーチェーンで保存することを強くお勧めします。理解を深めるには、この投稿を参照してください。

于 2012-04-24T18:03:44.217 に答える
0

質問に答えるには:キーチェーンデータを使用して自動ログインする場合は、無料のフレームワーク「SFHFKeychainUtils」を使用してください。ユーザー名、パスワード、サービス名をキーチェーンに保存します。取得したい場合は、NSUserDefaultsにユーザー名を保存するだけで、簡単にパスワードを取得できます。

どうぞ:

SiFi HiFiフレームワーク: https ://github.com/ldandersen/scifihifi-iphone/tree/master/security

SiFi Hifiフレームワーク(ARC互換): https ://stackoverflow.com/a/10348964/1011125

SFHFKeychainUtilsの使用方法:http: //gorgando.com/blog/technology/iphone_development/simple-iphone-tutorial-password-management-using-the-keychain-by-using-sfhfkeychainutils

于 2012-05-07T09:32:25.720 に答える
0

NSUserDefaultsとSSKeychainの組み合わせを使用しました。NSUserDefaultsを使用してユーザー名を保存し、SSKeychainを使用してパスワードを保存しました。

これは、資格情報を保存するために使用したコードです

NSString *user = self.username.text;
NSString *password = self.pass.text;
[SSKeychain setPassword:password forService:@"achat" account:user];
NSUserDefaults *dUser = [NSUserDefaults standardUserDefaults];
[dUser setObject:user forKey:@"user"];
[dUser synchronize];

これは、資格情報を取得するために使用したコードです

NSUserDefaults *eUser = [NSUserDefaults standardUserDefaults];
NSString *savedUser = [eUser objectForKey:@"user"];

    if (!savedUser) {
        UIAlertView *uhoh = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"Please enter your username and password." delegate:self cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
        [uhoh show];
    }

    else {
            NSString *savedPass = [SSKeychain passwordForService:@"achat" account:savedUser];
            self.username.text = savedUser;
            self.pass.text = savedPass;
         }
于 2013-09-15T17:27:19.090 に答える