如果您通過HTTP身份驗證與您的服務器進行身份驗證(根據您的評論以上),那麼我會以不同的方式做到這一點。當用戶輸入他們的用戶名/密碼時,使用NSURLConnection
向任何頁面(輕量級)發出請求。如果用戶名/密碼不正確,您可以在NSURLConnectionDelegate
方法中處理失敗並提示用戶輸入新的用戶名/密碼。
您也可以使用iOS 5版本NSURLConnection
而不是委託方法來做到這一點,但文檔不是很好。
當這第一個請求成功,然後加載網絡視圖。
編輯:使用NSURLConnection的檢查,如果HTTP認證成功
確定的追加例題,這裏有一個簡單的例子。您可以通過允許NSURLConnection
加載您的預期請求,並且如果它成功將響應數據加載到webView
與啓動新請求相比較,可以做得更好。閱讀URL加載系統文檔以瞭解更多關於如何使用NSURLConnection
。
在你webView
委託,發起NSURLConnection
與同一個域的請求爲webView
請求與用戶憑據,如下所示:
- (void)performHTTPAuthRequest
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://%@:%@@test.starsightings.com", username, password]]];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
}
// if the request succeeds, credentials must be good so load the webView
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// request completed successfully so username/password must be good
[self.webView loadRequest:theRequest];
}
// ignore the failure
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}
// if we get an auth challenge, the credentials are bad so cancel the request and alert the user
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
[[challenge sender] cancelAuthenticationChallenge:challenge];
// alert user that username/pwd is invalid
}
由服務器強制執行此密碼要求?如果是這樣,響應應該包含適當的錯誤,以便您處理並嚮應用用戶顯示適當的錯誤。 – XJones 2011-12-21 18:03:22
不,密碼是這樣發送到服務器: http:// username:[email protected] 如果我在我的mac瀏覽器上輸入錯誤的用戶名/密碼,他會要求我重新輸入。這不適用於iPhone,所以我想有一個像'計時器' – user1110365 2011-12-21 23:28:34