我在this previous stackoverflow.com post中遇到了同樣的問題。具有Objective-C客戶端登錄界面的Google App Engine
具體來說,我似乎能夠正確地獲得「Auth」標記,但是當我訪問後面的頁面時,試圖在標題中使用它仍然只是返回登錄頁面的HTML。
以下與這篇文章相關的鏈接,我已確定您需要進行後續調用this URL。
對URL的調用會給你一個ACSID cookie,然後需要在隨後的調用中傳遞該cookie以保持已認證的狀態。
當請求此cookie,我讀過各個崗位說你需要通過將其追加到查詢字符串指定你原來的身份驗證令牌這樣的:
?auth=this_is_my_token
我也看到了,你應該設置它在google's documentation使得HTTP標頭名稱/值描述的HTTP標頭是:
Authorization: GoogleLogin auth=yourAuthToken
我已經試過這兩種方法和我沒有看到任何cookie返回。我使用了Wireshark,Firefox的LiveHttpHeaders,以及簡單的NSLog語句,試圖查看是否返回這樣的內容。
下面是我一直在使用的代碼片段。
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://yourapp.appspot.com/_ah/login?auth=%@", [token objectForKey:@"Auth"]]];
NSHTTPURLResponse* response;
NSError* error;
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setValue:[NSString stringWithFormat:@"GoogleLogin auth=%@", [token objectForKey:@"Auth"]] forHTTPHeaderField:@"Authorization"];
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//show me all header fields
NSLog([[response allHeaderFields] description]);
//show me the response
NSLog(@"%@", [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]);
NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://yourapp.appspot.com/_ah/login"]];
//show me all cookies
for (NSHTTPCookie *cookie in all)
{
NSLog(@"Name: %@ : Value: %@", cookie.name, cookie.value);
}
我希望您可以使用ClientLogin
作爲Google App Engine代碼。
這是一個Cocoa的東西......「URL加載系統會自動發送任何適合NSURLRequest的存儲cookie,除非請求指定不發送cookie。同樣,根據當前的cookie接受策略,接受在NSURLResponse中返回的cookie。 – z8000 2009-02-12 19:12:49