This authorization code has been used

Rails4のoauth認証でハマった。

 

http://npb.somewhatgood.com/blog/archives/715

のサイトを参考にしてfacebookからoauthを使用してユーザー情報を取得しようとした。

しかし、csrf系のエラーが発生!

これは

 

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,
    ENV['FACEBOOK_KEY'],
    ENV['FACEBOOK_SECRET'],
    :provider_ignores_state => true
end

provider_ignores_stateをtrueにすると回避出来るらしい。

 

しかし、その後もエラーでThis authorization code has been usedという、メッセージがfacebookから返ってくる。しかも一度目エラーが出て、ブラウザのバックボダンで戻って再度やると通る…

 

セッションとか、Facebook Develooperのアプリ設定が間違いがあるのではないかと、調べたが解決しない。

結局、新規アプリを作ってそこに組み込んでみて試して、今のアプリと比較したところ、現状のRailsアプリにはベーシック認証がかかっており、これを外すとちゃんと動作した。

エラーメッセージと原因がリンクしてなかったので、めちゃくちゃ時間がかかった。

もし、同じバグにあったら一度oauth認証ではベーシック認証を外してみることをおすすめする。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rails4 tubolink ios7

Rails4のtubolinkを使っていて、jqueryを読み込みたいところだけ、

プロパティで'data-no-turbolink' => trueを指定していたのだが、ios7のブラウザでリンクを押すと、リンク先でリロードすると画面が真っ白になるバグがあった。とりあえず、tubolinkを解除したのだが、ios7ではこのようなバグがあるらしい。

 

自分だけかな。。

 

Android UI

現在、社内の案件でAndroidアプリを担当することになった。

 

AndroidJava未経験だが、やるしかない。

今、仕事で問題になっているのが、カメラで写真を撮って保存する作業。

これは、ネットに沢山のソースコードを参考にできるので保存するまでは比較的簡単にできた。

問題は、撮影中と撮影後の画面のレイアウトを変えたい点である。

 

onPictureTaken()の最後に画面のViewを替える処理をしたところ、アプリが強制終了してしまう。

例えば、Intentを作成して他のActivityに変更してみたり、また非表示にしていたアイコンを表示する処理をしたところ止まってしまう。

 

 

それで、色々と調べていたところスレッドに関する処理を間違えていたせいで終了するのではないかと、感じている。

http://wiki.livedoor.jp/moonlight_aska/d/%A5%B9%A5%EC%A5%C3%A5%C9%A4%AB%A4%E9UI%A4%F2%C1%E0%BA%EE%A4%B9%A4%EB

 

スレッド処理を今までやったことがなかったので、すこし調べる必要があるのかもしれない。

Railsとスマートフォン

現在、スマートフォンアプリの開発をしている。

 

私はそのアプリのRailsでバックエンドを担当しており、フロント(今回はアンドロイドアプリ)に対してバックエンドで登録した内容をjsonで渡して、ユーザーが操作した結果をpostで受け取り結果を返す処理を行なっている。

 

明日は、postで受け取った内容を処理してjsonで返す実装を行う。

 

実は、PC側での操作の実装は完成しているので、あとはいかにスマートフォンからのアプリをからの処理を実装するかだ。

 

他の仕事もあるし、あんまり時間がない笑

Rails 中間テーブル

Railsでつまずいた。

 

プライマリーキーのない中間テーブルを作成して、そのテーブルは2つのテーブルを参照している。

 

そのテーブルに対して、UPDATEをかけようとしようとするが、プライマリーキーがないせいかINSERTになってしまう。

 

editアクションをするたびに新規作成されるので困った。

 

先輩に聞いたところ、先輩はUPDATEではなく、DELETEしてからINSERTをするようにアドバイスされた。きっと、プライマリーキーを他に設定する方法がActiverecordの中にあるのだが、時間がないためこの方法を仕方なくとってみる。