2010-03-21 2 views
2

iPhone에서 iPhone 앱에 액세스하기 전에 사용자 이름과 비밀번호를 얻기위한 로그인 화면을 어떻게 표시합니까? 또한 iPhone은 웹 브라우저와 같은 안전한 웹 사이트에 쿠키를 저장합니까?iPhone 응용 프로그램에 액세스하기 전에 사용자가 로그인 화면을 통과하도록합니까?

나는 사용자가 내 웹 사이트에 사용자 이름/비밀번호로 로그인하도록 요청하는 대신 iPhone의 설정에 저장할 수있는 긴 API 키를 제공 할 것을 고려하고있었습니다 (Slicehost iPhone 앱 접근 방식 인 것 같습니다.). 사용자가 안전하게 로그인하도록하는 가장 좋은 방법은 무엇입니까? iPhone 앱과 웹 사이트의 디자인을 완전히 제어 할 수 있으므로 많은 유연성이 있습니다.

답변

5

내가 앱의 몇이 필요가 있고, 나는 다음과 같은 패턴을 사용 : 사용자에게 제공됩니다 첫 번째 뷰 컨트롤러에서

을, 나는 UserPrefsManager는 싱글 여부는 다음의 시험이며, 어디로 사용자 자격 증명을 알고 있습니다. 이 호출은 사용자에게 등록해야한다는 것을 알려주는 모달 뷰 (FirstTimeWelcomeViewController)를 표시합니다.

-(IBAction) createAccount 
{  
    UIViewController * parent = [self parentViewController]; 
    CreateAccountViewController * vc = [[[CreateAccountViewController alloc] initWithNibName:@"CreateAccountViewController" bundle:nil] autorelease]; 
    [self dismissModalViewControllerAnimated:false]; 
    [parent presentModalViewController:vc animated: false]; 
}

이 또한 forgotPassword을 위해 존재한다는 것을 상상하고, loginACcount ... 같은 패턴 :

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    UserPrefsManager * prefs = [UserPrefsManager sharedInstance]; 
    if (![prefs isLoggedIn]) 
    { 
     FirstTimeWelcomeViewController * vc = [[[FirstTimeWelcomeViewController alloc] initWithNibName:@"FirstTimeWelcomeViewController" bundle:nil] autorelease]; 
     [self presentModalViewController:vc animated: false]; 
    } 
    else 
    { 
     if (![[RWXLocationSingleton sharedInstance] hasLocation]) { 
      [[RWXLocationSingleton sharedInstance] findLocationWithAccuracy:kCLLocationAccuracyThreeKilometers withObject:self andSelector:@selector(updateLocationsView)]; 
     } 
     [[self tableView ]reloadData]; 
    } 
}

FirstTimeWelcomeViewController는 기본적으로 로그인 할 사람들을 맞이하고 다양한 방법에 소요 버튼이있는 화면입니다 . 이렇게하면 현재보기가 버튼을 누른 특정 사례를 처리하는보기로 대체됩니다. 'loginAccount'방법을 복용

, 당신은 LoginAccountViewController을 연, 그리고는 다음과 같이 작동 loginButton라는 방법을 가지고 있습니다 ...

-(IBAction) loginButton 
{ 
    NSString * u = [self.username text]; 
    NSString * p = [self.password text]; 

     // 
     // app specific logic that tests various inputs and creates a user object. 
     // 
     // goes here... 
     // 

     if([user checkValid]) 
    { 
     UserPrefsManager * prefs = [UserPrefsManager sharedInstance]; 
     [prefs setPassword:p]; 
     [prefs setUsername:u]; 
     [self dismissModalViewControllerAnimated:FALSE]; 
    } 
     // 
     // more app specific stuff 
     // 
} 

을 그리고 꽤 많은 것을입니다. 키 체인에 물건을 넣거나 사용자 기본값을 저장하는 표준 방법 중 하나를 사용하여 정보를 저장해야합니다. 사용자가 다시 만들 때 성가신 일이라면 선택하는 항목이 복원간에 지속되는지 확인하십시오. 첫 번째 부분은 가장 유용한 비트이며, 나머지는 컨텍스트에 유용 할 수 있다고 생각합니다.

+0

이 질문의 두 번째 부분은 대답하지 않는다는 점에 유의하십시오. 대화 상자를 제시하는 방법 중 첫 번째 부분 만 대답합니다. 처음에는 앱에 로그인 할 이메일을 요구합니다 (사용자 이름은 실제 이메일 주소이며, 도움이되지 않습니다). 그런 다음 비밀번호를 선택하도록합니다. – corprew

+0

위대한 답변을 주셔서 감사합니다! NSUserDefaults를 사용하여 로그인 정보를 저장 했으므로 NSUserDefaults는 지속될 것이고 시작하기가 조금 더 어려워 보였습니다. – MikeN

+0

내 앱이 앱 델리게이트를 통해 첫 번째 모달을로드합니다.이를 제거하고 내 탭 컨트롤러의 첫 번째보기에 배치해야합니까? 그렇지 않으면 AppDelegate.m에 배치 할 수 있습니까? –

1

OAuth (http://oauth.net/)와 같은 기술을 살펴 보는 것이 좋습니다. 이를 통해 사용자는 사용자 이름과 암호를 실제로 입력 할 필요없이 응용 프로그램에 대한 자신의 계정에 대한 액세스 권한을 부여 할 수 있습니다. 또한 사용자 자격 증명의 보안 저장소에 대해 걱정할 필요가 없으며 암호가 변경되는 등 문제가되지 않는다고 의미합니다.

페이 스북 (Facebook)/트위터와 다른 많은 유명 회사가 사용하기 때문에 실제 사용하지는 않습니다. (실제로 공식 표준으로 승인되는 과정에 있습니다.)

+0

이것은 내 질문에 대한 주제와 조금 다릅니다. – MikeN

+0

@MikeN - 어떻게 주제에서 벗어나나요? (그리고 아래로 투표?) "내 웹 사이트에 사용자가 자신의 iPhone 설정에 저장할 수있는 긴 API 키를 제공 할 생각"이라고 말했습니까? 이것은 OAuth와 매우 유사합니다. 기존 표준을 사용할 수있을 때 보안에 대한 자신 만의 방법을 만드는 이유는 무엇입니까?앞으로 API를 열려면 개발자가 또 다른 인증 메커니즘을 개발해야하는 이유는 무엇입니까? – Rosstified

-2

앱 자체에 대한 액세스를 제한 할 수는 없지만 사용자 이름과 비밀번호를 묻는 초기보기를 제공하는 것은 쉽습니다. 사용자가 올바른 정보를 제공하지 않으면 앱은 실제로 웹 사이트를로드하는 다음보기로 진행할 수 없습니다.

마찬가지로 앱을 샌드 박스 한 폴더에 키를 저장하면 사용자 나 다른 사람이 앱을 통해 저장하지 않을 수 있습니다.

관련 문제