ruby on rails Devise और iphone ऐप के बीच HTTP प्रमाणीकरण




ruby-on-rails api (2)

मैं रेल पर रूबी के लिए नया हूं लेकिन मैं अपने एसक्यूलाइट डेटाबेस से डेटा को अपने आईफोन ऐप से रेल वेब ऐप में भेजना चाहता हूं। एक "सिंक" सेवा की तरह।

मैं वेब ऐप के लिए प्रमाणीकरण के लिए तैयार कर रहा हूं। मैंने मूल HTTP प्रमाणीकरण सक्षम किया है और मैं xml या json डेटा के लिए वेबसाइट में घुमा सकता हूं। जब मैं पोस्ट हेडर जेएसओएन और उपयोगकर्ता नाम और पासवर्ड के साथ सेट करता हूं तो मैं वेबसाइट पर भी डेटा अपलोड कर सकता हूं।

यहाँ है जहां मैं अटक गया हूँ।

1) मैं पहली लॉगिन के बाद उपयोगकर्ता को साइन इन कैसे रखूं? क्या मैं वेबसाइट पर डेटा भेजते समय हर बार http प्रमाणीकरण का उपयोग करता हूं? मैंने टोकन प्रमाणीकरण के बारे में पढ़ा है लेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाए।

2) मैं JSON डेटा को http://localhost:3000/example साथ सही उपयोगकर्ता नाम और पासवर्ड के साथ पोस्ट कर सकता हूं। हालांकि, उपयोगकर्ता नाम और पासवर्ड गलत होने पर यह HTML सामग्री देता है। क्या मुझे ऐसा कुछ लिखना है जो लॉगिन सफलता / शीश के बारे में जेसन डेटा देता है?

3) मेरे आईफोन ऐप और मेरे वेब ऐप के बीच संवाद करने के लिए। क्या मैं वेब ऐप साइड पर एक रीस्टफुल एपीआई लिखने में सही हूं? क्या मुझे सक्रिय संसाधनों का उपयोग करने की ज़रूरत है?

मैं वास्तव में पूरी तरह से बड़ी तस्वीर पर अटक गया हूं कि यह सब कैसे काम करता है। धन्यवाद!


ऐसा करने के कई तरीके हैं जो आप कर सकते हैं। मैंने अपने आईफोन ऐप में त्रुटियों को वापस करने के लिए डेविस प्राप्त करने के लिए क्या किया था जिसे मैं समझ सकता था (उदाहरण के लिए 401) कस्टम विफलता ऐप बना रहा था:

# 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

अन्यथा डिवाइसेज केवल एक रीडायरेक्ट प्रतिक्रिया कोड के साथ एचटीएमएल लौटाता है भले ही लॉगिन जानकारी सही या गलत थी।

चूंकि मेरे ऐप को उपयोगकर्ताओं को मेरे रेल बैकएंड के खिलाफ प्रमाणित करने की आवश्यकता है, इसलिए मैंने इस तरह एक साधारण लॉगिन प्रणाली लागू की:

#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'

फिर आईफोन ऐप में आप इस तरह के जीईटी अनुरोध / लॉगिन को भेजकर मान्य कर सकते हैं (मैं ASIHTTPRequest उपयोग ASIHTTPRequest हूं क्योंकि यह कमाल है):

- (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    
}

फिर जब भी आपको ऐप में डेटा पोस्ट करने की आवश्यकता होती है तो आप उपयोगकर्ता डिफ़ॉल्ट से उपयोगकर्ता नाम और पासवर्ड पुनर्प्राप्त कर सकते हैं और उन्हें अनुरोध पर संलग्न कर सकते हैं। यदि आपको अधिक सुरक्षित होने की आवश्यकता है, तो आप उन्हें कीचेन में स्टोर कर सकते हैं।

मुझे यकीन है कि ऐसा करने के बेहतर तरीके हैं, लेकिन उम्मीद है कि यह आपको एपीआई प्रमाणीकरण रणनीतियों के बारे में सोच सकता है।


मैं यहां प्रदान किए गए दस्तावेज को देखने की सिफारिश करता हूं

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

आप भी दो रचनाओं पर स्क्रीनकास्ट देखना चाहते हैं।

चूंकि ऑथ को संभालने के कई अलग-अलग तरीके हैं, इसलिए आपको क्या उपलब्ध है, इसकी बेहतर समझ लेनी चाहिए क्योंकि डेविस मूलभूत टूल और टोकन आधारित ऑथ का समर्थन करता है





http-authentication