2011-11-06 51 views
3

我想创建一个iphone应用程序,通过rails(UI-less/JSON)Web服务支持后端。与其他网站一样,我将拥有的其中一项功能是登录和注销。现在,我正在考虑如何在iPhone上构建这种登录功能,以及我的Rails Web服务应该做什么?在iPhone上为现有网站登录功能

任何人有任何指示如何做到这一点?这是我迄今为止想到的。

由于我的应用程序将是唯一使用此Web服务的应用程序,因此我将生成一个密钥,该密钥将传递给每个Web服务调用以确保没有其他人可以使用此Web服务(没有其他应用程序可以使用我的登录和注销功能)。

当用户调用登录ws时,我会检查以确保用户的登录信用是有效的,当他们是,我会通过他们一个令牌,他们将保持(我应该如何保持令牌?不认为iPhone有会话),他们将不得不调用另一个Web服务传递令牌/电子邮件/密码来通知ws客户端已经获得密钥。

对于每个受限制的ws呼叫,用户需要传递令牌来调用该服务。

当用户注销时,令牌将失效。

基本上我只是复制OAuth机制或类似的东西。我最大的问题是如何将令牌保留在客户端(iPhone)上。

回答

1

您可以使用NSUserDefaults来存储令牌,您可以设置一个密钥并根据该密钥进行存储和检索。

当用户注销时,您可以清除该密钥的NSUserDefault。

-(void)saveToUserDefaults:(NSString*)myString 
{ 
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

    if (standardUserDefaults) { 
     [standardUserDefaults setObject:myString forKey:@"LoginAuthToken"]; 
     [standardUserDefaults synchronize]; 
    } 
} 

-(NSString*)retrieveFromUserDefaults 
{ 
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
    NSString *val = nil; 

    if (standardUserDefaults) 
     val = [standardUserDefaults objectForKey:@"LoginAuthToken"]; 

    return val; 
} 

参考文献;

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

http://www.cocoadev.com/index.pl?NSUserDefaults

如果你想存储的用户名和密码,为您的Web服务,你应该使用IOS钥匙串访问,以保持它的安全。

参考文献;

http://developer.apple.com/library/mac/#documentation/security/conceptual/keychainServConcepts/02concepts/concepts.html