成果物の制作2作品目② 予定管理サービス twitter認証の実装
方法はいくつかあると思いますが、今回はgemのomniauthでツイッター認証しようと思います
まずgemファイルを追加
gemfile
gem 'omniauth' gem 'omniauth-twitter'
そしてbundle install
ツイッターで開発するアプリをここのCreate New Appで作成します。
https://developer.twitter.com/
Name, Descripiton, Website等のrequireな情報を埋めていき、CallbackURLsも埋めていきます。
とりあえず ドメイン
本番環境用 ...herokuapp.com/auth/twitter/callbackと
テスト環境用 ローカル環境/auth/twitter/callback
の2つで用意しておきました。
この部分は仕様変更が激しい部分らしいので、とりあえず試してみます。
追記: やってみましたが、これで正解のようです。
Consumer API keysが取得できたので、それぞれ環境変数としてコードに入れます
アプリケーション直下(gemfileとかと同じところ)にomniauth.rbのENV[〇〇○]で使う.envファイを作り環境変数を指定します、
/.env
APP_ID = "API keyはここ" APP_SECRET = "API secret keyはここ"
/config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, ENV['APP_ID'], ENV['APP_SECRET'] end
そしてgitignoreに.envを追加し、githubに公開しないようにします。
/.gitignore
/.env
ここで重要なのは、絶対に直接コードにENV[〇〇○]のコードを書いてはいけないということです。
最悪、というか結構な確率で悪い人に悪用され、乗っ取られたりします。(悪意のある人がクローラーを走らせ情報を収集していたりする)
環境変数は、その環境で直接指定するか、gitignoreでgithubにアップロードしないようにしましょう。
で、コントローラーにわたすセッション情報を書いていきます
user = User.find_or_create_from_auth(request.env['omniauth.auth']) session[:user_id] = user.id
後は暫定でビューファイルを作ります
<% if session[:user_id]==nil %> <%= link_to "Twitterログイン", "/auth/twitter"%> <% else %> <%= link_to "Twitterログアウト", "/logout"%> <% end %>
これにそって、ルーティングも設定してやれば、
無事にテスト環境でログインすることができました!
そして本番環境は成功!
今まではgithubにコードをアップロードする時はブランチをマージしてからmasterで直接pushする脳筋スタイルでしたが、
今回はチーム開発を意識するために擬似的にisuueを出してブランチを切り、github側でマージをしてみることにします。
前にも試したんですが、勝手がわからなくて結局やらないくなってしまったため、再挑戦。
流れとしてはissueを出してから、開発用ローカルbranchでpushし、githubでマージしてからissueをクローズします。
個人開発なので全部自分でやっていますが、本来はgithubでマージするのはそのプロジェクトの任者の方になります。
今回は全部オッケーかと思いきや、issueがopenしっぱなしで、closeにならない…
多分commitとかpushとissueの紐づけに失敗してるのかと思われるので、次回は完璧にしたいと思います