从设置用户名和密码首选项登录

Posted

技术标签:

【中文标题】从设置用户名和密码首选项登录【英文标题】:Logging in from settings username and password preferences 【发布时间】:2012-06-20 09:02:08 【问题描述】:

我有一个使用 webView 的应用程序。在网站的主屏幕上,我想使用用户在应用程序设置选项中输入的用户名和密码登录。目前我有这个代码,我在这个论坛上提出的类似问题的解决方案中看到了它。但它不起作用(对另一个人也没有)。

-(IBAction)cachepressed:(id)sender  

    NSString *baseurl=[[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"];
    NSString *username= [[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];
    NSString *password= [[NSUserDefaults standardUserDefaults] stringForKey:@"pswrd_preference"];    
    NSString* content = [NSString stringWithFormat:@"username=%@&password=%@", username, password];
    NSData *data=[content dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postlength=[NSString stringWithFormat:@"%d",[data length]];
    NSString *loginpage= [baseurl stringByAppendingString:@"/index.php?title=Special:UserLogin"];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:loginpage]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postlength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:data]; 
    NSError *error=nil;
    NSURLResponse *response=nil;
    NSData *result=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *htmlString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
    [webView loadHTMLString:HTMLString baseURL:[NSURL URLWithString:loginpage]];    


我不太确定以 [request setValue...] 开头的两行代码。有人可以提出解决方案吗?这将是一个很大的帮助。感谢期待。

【问题讨论】:

【参考方案1】:

这在很大程度上取决于网站上的身份验证方式。

根据我从您的问题中了解到的情况,您发布的代码使用 POST 将名为“用户名”和“密码”的字段的值发送到 index.php?title=Special:UserLogin 页面。

您需要确保所有内容都已相应设置。

1.网站上的字段名称是否相同?

可能登录表单使用不同的字段名称,而不是用户名和密码。检查源代码,看看输入的名称是否确实是“用户名”和“密码”

2。您的主机是否允许发布来自不同来源的数据?

我曾经设置过我的设置,因此如果 POST 请求不是来自我的服务器,则它们不会起作用,因此从 iPad 发布数据将无法正常工作。 你也是这样吗?

3.登录过程真的是通过向该页面发布数据来完成的吗?

也许在网站上,身份验证是在不同的 php 页面上使用 AJAX 完成的,然后你会被重定向到 index.php?title=Special:UserLogin,我过去见过这种情况。

底线是,在 webview 中进行登录之前,您需要确切地知道在网站上是如何完成登录的。如果我错了,请纠正我,但根据您的帖子,这里似乎并非如此

【讨论】:

感谢您的回复。正如您正确指出的那样,我更正了字段名称。但我不知道其他两点。有没有办法查出来? 嗯,第二个不太可能,大多数网站都允许外部 POST 请求。对于数字 3,我想最简单的检查方法是在浏览器中查看网站的源代码。该网站的链接会很有帮助

以上是关于从设置用户名和密码首选项登录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用共享首选项让用户保持登录状态?

用于触摸 ID 和密码设置的 iOS 首选项 url 方案

MCD 机电一体化概念设计首选项

SharedPrefs 似乎已被擦除,即使我使用它们来自动登录

怎么改变opera浏览器IP地址

整数共享首选项始终返回0