kouの技術的メモ

学習した内容の定着やアウトプット用に開設しました

成果物の制作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の紐づけに失敗してるのかと思われるので、次回は完璧にしたいと思います