2013-02-20 26 views
2

有沒有一種方法來認證用戶而不是來自Flask(Python)後端的webview?沒有UIWebView的iOS應用程序認證

這是我的後臺登錄代碼:

@app.route('/login/', methods=['POST']) 
def login(): 
    params = json.loads(request.data) 
    username = params['username'] 
    password = params['password'] 
    u = User.query.filter_by(username=username).first() 
    if u: 
     if utils.check_password_hash(password, u.pw_hash): 
      login_user(u) 
      return ('', 200) 
     else: 
      return ('', 400) 
    else: 
     return ('', 400) 
+0

我希望這個問題相當一般,所以對未來的用戶有幫助。如果您希望我在問題中添加任何內容,請通知我。謝謝。 – GangstaGraham 2013-02-20 18:13:00

+0

你可以使用'NSURLConnection'來對你的API端點執行'GET'或'POST'請求​​。 – 2013-02-20 18:21:44

+0

登錄到用戶,我目前有這種情況,但它不會對用戶進行身份驗證。 – GangstaGraham 2013-02-20 18:53:30

回答

1

是的,你肯定能做到這一點。這就是我通常都它,將其更改爲您的需求(請記住,NSJSONSerialization僅適用於iOS 5以上):

@property (nonatomic) NSOperationQueue *basicQueue; //add this to your header or as an instance variable 

-(void)logMeIn:(NSString *)username password:(NSString *)password { 

basicQueue = [[NSOperationQueue alloc] init]; 

NSDictionary *userCredentialsDict = [NSDictionary dictionaryWithObjectsAndKeys:username, @"username", password, @"password", nil]; 
NSData *encodedDict = [NSJSONSerialization dataWithJSONObject:userCredentialsDict options:NSJSONWritingPrettyPrinted error:NULL]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://yoursite.com/login"]]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:encodedDict]; 
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

[NSURLConnection sendAsynchronousRequest:request queue:basicQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*) response; 
    NSString *stringFromData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    if (httpResponse.statusCode == 200) { 
     //do stuff 
     NSLog(@"Received data, parsed into string: %@", stringFromData); 
    } else { 
     //do error stuff or whatever 
    } 

}]; 

}

欲瞭解更多信息, 退房

+0

非常感謝。很有幫助。 :)將在Apple Developer鏈接上閱讀。 – GangstaGraham 2013-02-20 19:13:19

+0

有趣的解決方案。在'httpResponse.statusCode == 200'被接受後,你如何存儲會話,以便連續訪問web服務不需要任何進一步的登錄請求?或者是每次向服務器發送請求時傳遞用戶名/密碼的常用方式? – Houman 2013-10-05 13:25:45