・iOSのサンプルコードが間違っている
TPRegisterController.mからonSubmitメソッド がごっそり抜けている。
https://gist.github.com/shinriyo/8234566
のコードを追加しました。
・TPLoginController.hが誤っている。
//- (void)onRegisterFacebook:(NSString *)email uid:(NSString *)uid; - (void)onRegisterFacebook:(NSString *)email uid:(NSString *)uid username:(NSString *)username;
→username引数がない。
・TPTravelCreateController.mのエラーメッセージが誤り
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"エラーが発生しました" message:@"メールアドレスまたはパスワードが間違っています"
とあるが、そもそも旅行情報を登録するフォームなので、メールアドレスもパスワードも入力するところではない。
・P244のユーザのログイン時
Started POST "/api/users/sign_in" for 127.0.0.1 at 2014-01-05 20:41:07 +0900 Processing by Api::SessionsController#create as */* Parameters: {"user"=>{"email"=>"shinriyo@gmail.com", "password"=>"[FILTERED]"}} WARNING: Can't verify CSRF token authenticity User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'shinriyo@gmail.com' LIMIT 1 (0.2ms) BEGIN (0.1ms) COMMIT Completed 401 Unauthorized in 76ms
→「WARNING: Can't verify CSRF token authenticity」の警告が出る。
→根本的な解決ではないが、app/controllers/application_controller.rb から「protect_from_forgery」を外す。
または、
app/controllers/api/sessions_controller.rb に「skip_before_filter :verify_authenticity_token」 を追加する。
ちなみに、iPhone側のログには
2014-01-05 21:05:09.264 travelphoto[44927:c07] Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {( "text/json", "application/json", "text/javascript" )}, got text/html" UserInfo=0xbe8c330 {NSLocalizedRecoverySuggestion=<!DOCTYPE html>
が出力される。※Deviseがうまく認証できなくて「You have to confirm your account before continuing.」のエラーページが表示されるせい?
Gemfile
gem 'devise', '2.2.8'
にして最新版が入らないようにインストールしています。
→しかし、新しいdeviseだとtoken_authが利用できなくなっているので、2.2.4を利用する方がいいとのことなので、入れなおした。
◯Devise2.2.4版を入れなおした時のRailsに出てくるエラーメッセージ
Started POST "/api/users/sign_in" for 127.0.0.1 at 2014-01-09 10:17:19 +0900 Processing by Api::SessionsController#create as */* Parameters: {"user"=>{"email"=>"shinriyo@gmail.com", "password"=>"[FILTERED]"}} User Load (2.3ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'shinriyo@gmail.com' LIMIT 1 (0.2ms) BEGIN (0.2ms) COMMIT Completed 401 Unauthorized in 238ms Started GET "/users/sign_in" for 127.0.0.1 at 2014-01-09 10:17:19 +0900 Processing by Devise::SessionsController#new as */* Rendered users/shared/_links.haml (3.5ms) Rendered users/sessions/new.html.haml within layouts/application (19.1ms) Completed 200 OK in 286ms (Views: 285.1ms | ActiveRecord: 0.0ms)
Devise2.2.4を入れなおしたことにより、バージョンが古いのでセキュリティが甘くなったせいか、
app/controllers/application_controller.rb から「protect_from_forgery」を外さなくても、
「WARNING: Can't verify CSRF token authenticity」の警告は出なくなった。
しかし、401のエラーが発生した。
・Xcodeには相変わらず同じエラーが発生
2014-01-09 10:12:22.769 travelphoto[3399:c07] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0x622d24) -> Created Context UNNAMED 2014-01-09 10:12:22.771 travelphoto[3399:c07] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0x622d24) Set Root Saving Context: <NSManagedObjectContext: 0xba80410> 2014-01-09 10:12:22.771 travelphoto[3399:c07] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0x622d24) Created Main Queue Context: <NSManagedObjectContext: 0xad47470> 2014-01-09 10:12:22.772 travelphoto[3399:c07] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0x622d24) Set Default Context: <NSManagedObjectContext: 0xad47470> 2014-01-09 10:12:22.888 travelphoto[3399:c07] (null) 2014-01-09 10:12:23.319 travelphoto[3399:c07] Unbalanced calls to begin/end appearance transitions for <JASidePanelController: 0xba63d10>. 2014-01-09 10:13:52.874 travelphoto[3399:c07] Error: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo=0xad8f1d0 {NSErrorFailingURLStringKey=http://localhost:3000/api/users/sign_in, NSErrorFailingURLKey=http://localhost:3000/api/users/sign_in, NSLocalizedDescription=Could not connect to the server., NSUnderlyingError=0xbad08b0 "Could not connect to the server."} 2014-01-09 10:13:52.874 travelphoto[3399:c07] Suggestion: (null) 2014-01-09 10:14:17.070 travelphoto[3399:c07] Error: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server." UserInfo=0xbd63e20 {NSErrorFailingURLStringKey=http://localhost:3000/api/users/sign_in, NSErrorFailingURLKey=http://localhost:3000/api/users/sign_in, NSLocalizedDescription=Could not connect to the server., NSUnderlyingError=0xad92ff0 "Could not connect to the server."} 2014-01-09 10:14:17.071 travelphoto[3399:c07] Suggestion: (null) 2014-01-09 10:17:19.892 travelphoto[3399:c07] Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {( "text/json", "application/json", "text/javascript" )}, got text/html" UserInfo=0xbac83c0 {NSLocalizedRecoverySuggestion=<!DOCTYPE html> <html> <head> <title>Travelphoto</title> <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/album.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/api/friend.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/api/photo.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/api/travel.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/hoges.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/photo.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/top.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/travel.css?body=1" media="all" rel="stylesheet" type="text/css" /> <script src="/assets/jquery.js?body=1" type="text/javascript"></script> <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script> <script src="/assets/album.js?body=1" type="text/javascript"></script> <script src="/assets/api/friend.js?body=1" type="text/javascript"></script> <script src="/assets/api/photo.js?body=1" type="text/javascript"></script> <script src="/assets/api/travel.js?body=1" type="text/javascript"></script> <script src="/assets/hoges.js?body=1" type="text/javascript"></script> <script src="/assets/photo.js?body=1" type="text/javascript"></script> <script src="/assets/top.js?body=1" type="text/javascript"></script> <script src="/assets/travel.js?body=1" type="text/javascript"></script> <script src="/assets/application.js?body=1" type="text/javascript"></script> <meta content="authenticity_token" name="csrf-param" /> <meta content="C3Yhquz+fYhnEXpEPmzY7xBZ4RXraCS6ALV856t+A5c=" name="csrf-token" /> </head> <body> <p class='notice'> </p> <p class='alert'> You have to confirm your account before continuing. </p> <h2>Sign in</h2> <meta content="authenticity_token" name="csrf-param" /> <meta content="C3Yhquz+fYhnEXpEPmzY7xBZ4RXraCS6ALV856t+A5c=" name="csrf-token" /> <form accept-charset="UTF-8" action="/users/sign_in" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="C3Yhquz+fYhnEXpEPmzY7xBZ4RXraCS6ALV856t+A5c=" /></div><div> <label for="user_email">Email</label> <br> <input autofocus="autofocus" id="user_email" name="user[email]" size="30" type="email" value="" /> </div> <div> <label for="user_password">Password</label> <br> <input id="user_password" name="user[password]" size="30" type="password" /> </div> <div> <input name="user[remember_me]" type="hidden" value="0" /><input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1" /> <label for="user_remember_me">Remember me</label> </div> <div><input name="commit" type="submit" value="Sign in" /></div> </form> <a href="/users/sign_up">Sign up</a> <br> <a href="/users/password/new">Forgot your password?</a> <br> <a href="/users/confirmation/new">Didn't receive confirmation instructions?</a> <br> <a href="/users/auth/facebook">Sign in with Facebook</a> <br> </body> </html> , AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest http://localhost:3000/api/users/sign_in>, NSErrorFailingURLKey=http://localhost:3000/api/users/sign_in, NSLocalizedDescription=Expected content type {( "text/json", "application/json", "text/javascript" )}, got text/html, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xbc5ad40>} 2014-01-09 10:17:19.894 travelphoto[3399:c07] Suggestion: <!DOCTYPE html> <html> <head> <title>Travelphoto</title> <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/album.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/api/friend.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/api/photo.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/api/travel.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/hoges.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/photo.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/top.css?body=1" media="all" rel="stylesheet" type="text/css" /> <link href="/assets/travel.css?body=1" media="all" rel="stylesheet" type="text/css" /> <script src="/assets/jquery.js?body=1" type="text/javascript"></script> <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script> <script src="/assets/album.js?body=1" type="text/javascript"></script> <script src="/assets/api/friend.js?body=1" type="text/javascript"></script> <script src="/assets/api/photo.js?body=1" type="text/javascript"></script> <script src="/assets/api/travel.js?body=1" type="text/javascript"></script> <script src="/assets/hoges.js?body=1" type="text/javascript"></script> <script src="/assets/photo.js?body=1" type="text/javascript"></script> <script src="/assets/top.js?body=1" type="text/javascript"></script> <script src="/assets/travel.js?body=1" type="text/javascript"></script> <script src="/assets/application.js?body=1" type="text/javascript"></script> <meta content="authenticity_token" name="csrf-param" /> <meta content="C3Yhquz+fYhnEXpEPmzY7xBZ4RXraCS6ALV856t+A5c=" name="csrf-token" /> </head> <body> <p class='notice'> </p> <p class='alert'> You have to confirm your account before continuing. </p> <h2>Sign in</h2> <meta content="authenticity_token" name="csrf-param" /> <meta content="C3Yhquz+fYhnEXpEPmzY7xBZ4RXraCS6ALV856t+A5c=" name="csrf-token" /> <form accept-charset="UTF-8" action="/users/sign_in" class="new_user" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="C3Yhquz+fYhnEXpEPmzY7xBZ4RXraCS6ALV856t+A5c=" /></div><div> <label for="user_email">Email</label> <br> <input autofocus="autofocus" id="user_email" name="user[email]" size="30" type="email" value="" /> </div> <div> <label for="user_password">Password</label> <br> <input id="user_password" name="user[password]" size="30" type="password" /> </div> <div> <input name="user[remember_me]" type="hidden" value="0" /><input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1" /> <label for="user_remember_me">Remember me</label> </div> <div><input name="commit" type="submit" value="Sign in" /></div> </form> <a href="/users/sign_up">Sign up</a> <br> <a href="/users/password/new">Forgot your password?</a> <br> <a href="/users/confirmation/new">Didn't receive confirmation instructions?</a> <br> <a href="/users/auth/facebook">Sign in with Facebook</a> <br> </body> </html>