我正在构建一个带有 rails 支持的服务器的 iphone 应用程序。我正在使用设计宝石。我在客户端用户登录时遇到问题(一切都在 Web 端运行,甚至在带有 CURL 的终端中)。在 Xcode 上,我可以创建一个用户并且可以登录。登录后
(and recieving this in the log: "User logged in!")
然后我被推送到 indexViewController- 在这里我收到一个帖子没有加载的错误。原因是因为在 post_controller.rb 我有一个
before_filter :authenticate_user!
防止帖子加载。问题是,成功登录时生成的 auth_token 没有被存储并传递给不同的视图。那么,在日志中我得到:
'You need to sign in before continuing.'
好像我刚才解释的第一部分从未发生过一样。
在 indexViewController viewDidLoad 方法中,我有:
if (![[APIClient sharedClient] isAuthorized]) {
LoginViewController *loginViewController = [[LoginViewController alloc] init];
[self.navigationController pushViewController:loginViewController animated:YES];
}
isAuthorized 是 APIClient 中的一个 BOOL,用于检查 userID>0
在用户模型中,这是创建登录会话的代码
+ (void)loginUser:(NSString *)signature
email:(NSString *)email
password:(NSString *)password
block:(void (^)(User *user))block
{
NSDictionary *parameters = @{ @"user": @{
// @"signature": signature,
@"email": email,
@"password": password
}
};
[[APIClient sharedClient] postPath:@"/users/sign_in" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
User *user = [[User alloc] initWithDictionary:responseObject];
if (block) {
block(user);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
if (block) {
block(nil);
}
}];
}
我猜我在这里缺少一些 auth_token 实现?由于它是由设计自动生成的-我不确定如何告诉 xcode 记住它。auth_token 是一个字符串,在数据库的用户表中有一个列。我应该将 auth_token 作为参数添加到保存用户电子邮件和用户名的字典中吗?或者我如何让令牌持久存在?任何想法都会有所帮助。