Si vous vous authentifiez avec votre serveur via l'authentification HTTP (selon votre commentaire ci-dessus), je le ferais différemment. Lorsque l'utilisateur entre son nom d'utilisateur/PWD, faire une demande à n'importe quelle page (quelque chose de léger) en utilisant NSURLConnection
. Si le nom d'utilisateur/mot de passe est incorrect, vous pouvez gérer les échecs dans les méthodes NSURLConnectionDelegate
et demander à votre utilisateur un nouveau nom d'utilisateur/mot de passe.
Vous pouvez également le faire avec la version iOS 5 de NSURLConnection
au lieu des méthodes déléguées mais les docs ne sont pas très bons.
Lorsque cette première demande aboutit, chargez la vue Web.
EDIT: exemple supplémentaire de l'utilisation NSURLConnection pour vérifier si HTTP auth réussit
Ok, voici un exemple simple. Vous pouvez améliorer cela en autorisant NSURLConnection
à charger la requête voulue et si elle réussit à charger les données de réponse dans le webView
par opposition à l'initialisation d'une nouvelle requête. Lisez les documents relatifs au système de chargement d'URL pour en savoir plus sur l'utilisation de NSURLConnection
.
Dans votre délégué webView
, ouvrir une NSURLConnection
avec une requête au même domaine que la demande webView
avec les informations d'identification utilisateur comme suit:
- (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
}
Cette exigence est de mot de passe appliquée par le serveur? Si tel est le cas, la réponse doit contenir l'erreur appropriée pour que vous puissiez traiter et afficher l'erreur appropriée aux utilisateurs de l'application. – XJones
non, le mot de passe est envoyé au serveur comme ceci: http: // nom d'utilisateur: mot de [email protected] et si j'entre un mauvais nom d'utilisateur/mot de passe sur mon navigateur web mac il me demande de rentrer les deux. cela ne fonctionne pas pour l'iphone, donc je voulais avoir quelque chose comme un «timer» – user1110365