iT邦幫忙

DAY 28
0

從想法到快速實作的捷徑:Rails系列 第 28

[ Day 28 ][ Dev ] Facebook登入

  • 分享至 

  • xImage
  •  

有點老掉牙卻又很實用的主題。

拖到現在才做一部分是因為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的原因啦!

他可以幫我們管理這些隱私的東西,

同時也能顧及到部署上去環境之後的情形。

Figaro

gem "figaro"
  • bundle
  • figaro install
  • 執行完上述指令後,會發現多了一個config/application.yml,而且他也自動幫我們加到.gitignore裡面
  • 再來就是打開application.yml看看

不同於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

  • 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"]orFigaro.env.facebook_app_id

就是這麼簡單,

所以這裏我會把它改成:

config.omniauth :facebook, ENV["facebook_app_id"], ENV["facebook_secret"], :scope => 'email'
  • 剩下後端的部分omniauth就會幫我們搞定了,在去講解heroku之前先講一下在view要怎麼使用這個連結
  • 只要一行:ENV["domain"] + user\_omniauth\_authorize\_path(:facebook)這就是它的fb登入連結啦!

Heroku上的application.yml怎麼辦?

  • 記得我們在application.yml裡面有留個production部分嗎?該是讓他上場的時候了
  • figaro heroku:set -e production
  • 只要一行就會將application.yml的設定推到heroku上,其他部分不需要做更改,因為在heroku裡面取用facebook_app_id的方法跟Figaro一樣
  • 不相信的話可以執行heroku run rails c在裡面跑ENV["facebook_app_id"]試試看!
  • 希望大家會喜歡Figaro這個gemXD一開始只是覺得他的吉祥物很可愛,應該要來開一個主題是介紹github上有各式可愛logo圖的,同時也推一下Go的

參考資料:
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


上一篇
[ Day 27 ][ Dev ] 簡單的支援Markdown
下一篇
[ Day 29 ][ PM ] Trello管理專案也管理生活
系列文
從想法到快速實作的捷徑:Rails30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言