我正在尝试记录facebook的令牌和截止日期,因为每次都没有授权用户。但今晚我收到此错误的错误如:{"error":{"type":"OAuthException"
。
首先让我解释一下如何以及何时记录到期日期和令牌:
在DidLogin
:
-(void)fbDidLogin{
[[NSUserDefaults standardUserDefaults]setValue:facebook.accessToken forKey:@"fb_access_token"];
[[NSUserDefaults standardUserDefaults]setObject:facebook.expirationDate forKey:@"fb_expiration_date"];
登录时:
facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"fb_access_token"];
facebook.expirationDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"fb_expiration_date"];
if (![facebook isSessionValid]) {
NSLog(@"session not valid authorize again");
[facebook authorize:_permissions delegate:self];
}
else
{
if([delegate respondsToSelector:@selector(didFB_login)])[delegate didFB_login];
self.loggedin=TRUE;
}
经过一些NSLog
我明白了这个问题:
我的失效日期是
exp date:4001-01-01 00:00:00 +0000
因此,为了确保我没有犯错,我修改了facebook.m
:
//FBLoginDialogDelegate
/**
* Set the authToken and expirationDate after login succeed
*/
- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate {
self.accessToken = token;
self.expirationDate = expirationDate;
NSLog(@"self.expirationDate:%@",self.expirationDate);
if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)]) {
[_sessionDelegate fbDidLogin];
}
}
然后强制进行新的授权调用,但结果仍然是:
self.expirationDate:4001-01-01 00:00:00 +0000
现在的问题是:Facebook OAuth中是否存在错误?我怎样才能确定问题不在我的保存日期代码中?
答案 0 :(得分:2)
FB正在弃用长期会话中“offline_access”的使用。有关详细信息,请参阅https://developers.facebook.com/docs/offline-access-deprecation/。
在这里:https://developers.facebook.com/docs/mobile/ios/build/#extend_token如果您正在iOS中开发。
干杯!
答案 1 :(得分:0)
为什么OAuth会回答我expires_in 0?当场日期是4001因为
// We have an access token, so parse the expiration date.
NSString *expTime = [params valueForKey:@"expires_in"];
NSLog(@"expTime:%@",expTime);
NSDate *expirationDate = [NSDate distantFuture];
if (expTime != nil) {
int expVal = [expTime intValue];
if (expVal != 0) {
expirationDate = [NSDate dateWithTimeIntervalSinceNow:expVal];
expVal为0,因此失效日期为remoteFuture。 但令牌已经过期,当我尝试用该令牌查询时,我得到了oauth预期。 所以?有人有想法吗?
解决了..如果有人想知道为什么会发生这种情况,这就是答案:由于offline_access权限,expires_in为0 ..由于facebook密码更改,Burt令牌已到期服务器端。要解决此问题,只需添加
即可 - (void)request:(FBRequest *)request didFailWithError:(NSError *)error{
NSLog(@"didFailWithError : %@",[error description]);
NSDictionary* userinfo=[error userInfo];
// NSLog(@"userinfo:%@",userinfo);
NSString *type=[[userinfo valueForKey:@"error"]valueForKey:@"type"];
// NSLog(@"type:%@",type);
if([type isEqualToString:@"OAuthException"]){
NSLog(@"Exception from oauth let's take new token");
[facebook authorize:_permissions delegate:self];
}