万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    RailsとiPhoneではじめるアプリケーション開発 の動かないところ

    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="&#x2713;" /><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&#x27;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="&#x2713;" /><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&#x27;t receive confirmation instructions?</a>
    <br>
    <a href="/users/auth/facebook">Sign in with Facebook</a>
    <br>
    
    
    </body>
    </html>