2011-06-24 46 views
24

Raylarda yakmak için yeniyim ama SQlite veritabanımdaki verileri iphone uygulamasından raylar web uygulamasına göndermek istiyorum. Bir "senkronizasyon" servisi gibi.iPhone ve uygulama arasında HTTP kimlik doğrulaması

Web uygulaması için kimlik doğrulama için kullanıyorum. Temel HTTP kimlik doğrulamasını etkinleştirdim ve xml veya json verileri için web sitesine girebiliyorum. Ayrıca posta üstbilgisini JSON'a ve kullanıcı adı ve parola ile ayarladığımda web sitesine veri yükleyebilirim.

Burada sıkıştığım yer var.

1) Kullanıcı 1. oturumdan sonra nasıl oturum açabilirim? Web sitesine her veri gönderdiğimde http kimlik doğrulamasını kullanır mıyım? Jetonu doğrulamak için okudum ama nasıl kullanacağımı bilmiyorum.

2) JSON verilerini http://localhost:3000/example gibi doğru kullanıcı adı ve parola ile gönderebilirim. Ancak, kullanıcı adı ve şifre yanlışsa HTML içeriğini döndürür. Giriş başarısı/fialure hakkında json verilerini döndüren bir şey yazmam gerekiyor mu?

3) Benim iphone uygulaması ile web uygulamam arasında iletişim kurmak. Web uygulaması tarafında bir RESTful API yazarken doğru muyum? Aktif kaynakları kullanmam gerekir mi?

Tüm bunların nasıl çalıştığıyla ilgili genel resmin üzerine takılıyorum. Teşekkürler!

cevap

22

Bunu yapmanın pek çok yolu var. Devise Ben yorumlayabilir benim iphone app hataları (örneğin 401) döndürmek için almak için ne yaptım özel bir başarısızlık uygulaması oluşturmak oldu: Aksi

# config/initializers/devise.rb 
config.warden do |manager| 
    manager.failure_app = CustomFailure 
end 

# config/initializers/custom_failure.rb 
class CustomFailure < Devise::FailureApp  
    def respond 
    unless request.format.to_sym == :html 
    http_auth 
    else 
    super 
end 
    end 
end 

olursa olsun sadece bir yönlendirme cevap kodlu HTML sunduğundan Vasiyetle giriş olsun bilgi doğru ya da yanlıştı. Böyle/login için bir GET isteği göndererek doğrulamak iphone app Sonra

#app/controllers/pages_controller.rb 
before_filter :authenticate_user!, :only => [:login] 
ssl_required :login # you have to set up ssl and ssl_requirement 


def login 
    @user = current_user 
    respond_to do |format| 
    format.html {render :text => "#{@user.id}"} 
    format.xml {render :text => "#{@user.id}" } 
    end 
end 

#config/routes.rb 
match '/login',  :to => 'pages#login' 

: my app benim raylar arka uç kimlik doğrulaması için kullanıcılar gerekli yana

, böyle basit bir giriş sistemi uygulamaya (bu harika çünkü ASIHTTPRequest kullanın): Uygulamayla veri göndermek gerektiğinde

- (void) validate_login:(NSString*)name :(NSString*)pwd 
{ 
    NSURL *login_url = [NSURL URLWithString:@"https://mysite.com/login"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:login_url]; 
    [request setDelegate:self]; 
    [request setUsername:name]; 
    [request setPassword:pwd]; 
    [request addRequestHeader:@"Accept" value:@"application/xml"]; 
    [request startAsynchronous];  
} 

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
if ([request responseStatusCode] != 200) { 
    [self requestFailed:request]; 
} 
    else { 
    // authentication successful, store credentials 
     NSUSerDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setValue:[request username] forKey:@"username"]; 
     [defaults setValue:[request password] forKey:@"password"]; 
    } 
} 


- (void)requestFailed:(ASIHTTPRequest *)request 
{ 
    NSLog(@"failed with error: %d %@", [request responseStatusCode], [error localizedDescription]); 
    // tell user incorrect username/password  
} 

Sonra kullanıcı varsayılan kullanıcı adı ve şifre almak ve isteğine ekleyebilirsiniz. Daha güvenli olmanız gerekiyorsa, bunları Anahtarlık içinde saklayabilirsiniz.

Eminim bunu yapmanın daha iyi yolları vardır, ancak umarım bu, API kimlik doğrulama stratejileri hakkında düşünmenizi sağlayabilir.

+0

Hey Johnny, http: // localhost: 3000/login? User [email] [email protected]&user [password] = şifresine erişmeye çalıştığımda, temel http kimlik doğrulamasını etkinleştirdim ve uygulamayı denedim. "{" error ":" Devam etmeden önce oturum açmanız veya kaydolmanız gerekiyor. "}" Düşünceleriniz? – BeachRunnerFred

0

Ben de iki vasiyetle ilgili Screencasts izlemek isteyebilirsiniz burada

https://github.com/plataformatec/devise/blob/v1.1.6/README.rdoc

sağlanan belgelere bakın alarak öneriyoruz. kimlik doğrulama işlemek için birçok farklı yolu vardır yana

, sen tabanlı AUTH vasiyetle Temel Kimlik destekler beri mevcut olanı daha iyi anlamak ve belirteç olmalıdır

+1

Teşekkürler Aaron. Ben beni defalarca okudum. Demiryolundaki senaryoları da gördüm. Takip edebileceğim bir çeşit çerçeveye ihtiyacım var. Bir araya getirmeyi çok zor bulduğum birçok kavram var. –

İlgili konular