有點老掉牙卻又很實用的主題。
拖到現在才做一部分是因為settingslogic這個gem在上去heroku之後要做一些設定很麻煩。
(同時也很醜囧)
好險找到了figaro這個heoku friendly的gem。
所以接著廢話不多說就來實作吧!
首先當然是要先去Facebook的developer網站去申請一個app,
照著表填一填之後記得填上使用的domain。
再來把得到的facebook_app_id、facebook_secret記下來。
接著是實做前最關鍵的一步,
facebook_app_id、facebook_secret其實是敏感的資訊,
可是要部署上去heroku之前問題就來了,
因為我們得將它先push到github上(當然也可能是bitbucket or你自己code存放的地方)
就算github再安全(意指你用private repo),我們也不該將它加進git repo裡面,
所以應該要放在哪裡呢?
這就是我們要用figaro的原因啦!
他可以幫我們管理這些隱私的東西,
同時也能顧及到部署上去環境之後的情形。
gem "figaro"
figaro install
不同於settinglogic有一些比較不這麼討喜的符號,
figaro長得相對簡單很多:
# Add configuration values here, as shown below.
#
# pusher_app_id: "2954"
# pusher_key: 7381a978f7dd7f9a1117
# pusher_secret: abdc3b896a0ffb85d373
# stripe_api_key: sk_test_2J0l093xOyW72XUYJHE4Dv2r
# stripe_publishable_key: pk_test_ro9jV5SNwGb1yYlQfzG17LHK
#
# production:
# stripe_api_key: sk_live_EeHnL644i6zo4Iyq4v1KdV9H
# stripe_publishable_key: pk_live_9lcthxpSIHbGwmdO941O1XVU
裡面是一個簡單的範例,除此之外什麼都沒有。
再來就是加上一些自己東西的時候了:
app_name: "united-issues"
facebook_app_id: development的facebook_app_id
facebook_secret: development的facebook_secret
domain: "http://localhost:3000"
production:
facebook_app_id: production的facebook_app_id
facebook_secret: production的facebook_secret
domain: "http://united-issues.herokuapp.com"
這樣就結束了!該怎麼取用會留到omniauth說明。
Omniauth其實不只能拿來登入FB,還能串流其他家的api來登入或是做一些很酷的事情(google+, github...etc)
接著不免俗的先安裝gem吧!
gem "omniauth"
gem "omniauth-facebook"
gem "auto-facebook"
執行以下指令:
rails g auto_facebook:user
rake db:migrate
rails g auto_facebook:install
(因為我們user已經有name這個欄位,所以記得去把多餘的那個拿掉)
再來去打開config/initializers/devise.rb,將裡面的這行comment打開
config.omniauth :facebook, Setting.facebook_app_id, Setting.facebook_secret, :scope ='email'
接著就是神奇的時候了,我們剛剛在application.yml裡設定的值要怎麼拿出來呢?答案有兩種:
ENV["facebook_app_id"]or
Figaro.env.facebook_app_id
就是這麼簡單,
所以這裏我會把它改成:
config.omniauth :facebook, ENV["facebook_app_id"], ENV["facebook_secret"], :scope => 'email'
ENV["domain"] + user\_omniauth\_authorize\_path(:facebook)
這就是它的fb登入連結啦!figaro heroku:set -e production
參考資料:
http://sdlong.logdown.com/posts/207194-rails-newbie-3
https://github.com/laserlemon/figaro
https://github.com/intridea/omniauth
https://github.com/mkdynamic/omniauth-facebook