Using Yahoo! Browser-Based Authentication with your Rails Application


Yahoo has released a new product called BBAuth in Sep, 2006, It’s a mechanism for non-Yahoo applications to access Yahoo’s authentication mechanism and user data in a secure manner.

BBAuth fixes that problem when it comes to accessing data locked up at Yahoo. Using the tools Yahoo provides, non-Yahoo applications can request a user to sign in to Yahoo and give permission for Yahoo user data to be sent to the non-Yahoo application.

這是二年前做的東西,我們將透過 Yahoo Browser-Based Authentication(Yahoo! BB Auth)這個介面來實作使用 Yahoo! 帳號登入 Rails 應用程式的功能。實作之前需要先安裝 xml-simple 這個 Ruby Gem 套件,以及 Act-as-authenticated 這個 Rails Plugin。

首先建立遷移檔,在 User 模型添加一個一個 yahoo_userhash 欄位:

$ ruby script/generate migration AddYahooBBAuthToUsers

實作之前,先來了解一下Yahoo! BB Auth 的基本運作原理:

* 當使用者點擊網頁上的 http://你的網址/yahooLogin 連結之後會被重導至 Yahoo!的認證頁面
* 認證成功之後,Yahoo!會傳回一些 information,並導向 http://你的網址/yahooAuth

return 回來的其中一個值即是使用者在 Yahoo!與你的 Rails 應用程式聯合產生的 unique id。

若它在我們站上沒有資訊,就準備一個註冊頁面讓使用者填。如果有就用 find_by_yahoo_userhash 找出他是誰,確定身份後再改 seseeion 讓他能夠被辨識出來。



接下來請到下面網址註冊你的 Rails Application 並取得 Yahoo BB Auth 的 AppID:
http://developer.yahoo.com/auth/appreg.html

這裡輸入的 Web Application URL 和 BBAuth Success URL 網址必須和你的route.rb裡面的控制器設定符合,這裡我在 Web Application URL 輸入http://你的網址/yahooLogin,以及在 BBAuth Success URL 輸入 http://你的網址/yahooAuth,申請並認證之後會得到一個 AppID 和 Secret Key。再來就是在 #{RAILS_ROOT}/lib 目錄下建立一個 yahoo_bb_auth.rb 檔案,然後把這兩個 key 套用在檔案中:

接下來編輯 #{RAILS_ROOT}/config/routes.rb 檔案,設定 yahooLogin 和 yahooAuth 對應的 Controller 和方法:

然後編輯UsersController的Create方法,添加下面的內容:

然後在UsersController中新增 yahooLogin 和 yahooAuth 這兩個方法:

接下來編輯 app/views/users/new.html.erb 裡面的密碼輸入區塊,如果使用者透過Yahoo!帳號認證成功並返回註冊頁面,則不需要填寫密碼欄位:

再來編輯 app/views/users/edit.html.erb 這個帳號設定的視圖,這裡設定當使用者要修改密碼時,只有當使用者的 hashed_password 欄位為空(沒有密碼)以及 yahoo_userauth 欄位有值(已認證過 Yahoo!帳號)的情況下,才不需要填寫當前密碼的欄位(current_password),因為使用者目前並沒有設定密碼。

同樣的我們必須修改UsersController的update方法,來增加一些判斷邏輯:

OK!完成了,現在當使用者按下"從Yahoo帳號登入"的連結後,將會被導向Yahoo!的認證頁面,認證成功之後再將使用者帶回我們的網站,如果在資料庫中找到對映的yahoo_userhash資料,則將使用者登入,否則就將使用者導向註冊頁面。

Yahoo 帳號認證頁面
應用程式授權頁面

現在啟動你的Mongrel Cluster進行測試吧!enjoy~

熱門文章

Nov 2024【陽明山溫泉】老字號「馬槽花藝村」的溫泉管線已恢復|在木造山景湯屋享受半露天硫磺溫泉

【新北金山】週末的北海岸吃蟹泡湯小旅行|奇峰石溫泉餐廳、巧晏漁坊、獅頭山公園散步、陽明山家新休閒會館、焿子坪、鮮滿樓海鮮料理、馬槽花藝村、醺花鑶鴛鴦鍋

Nov, 2024【新北金山】冷水坑至磺嘴山健行, 欣賞秋天的美景,下山後到陽明山水溫泉會館享受100%白硫磺泉的療癒

Sep, 2021【苗栗南庄】蓬萊林道Off Road小試|雨後很爛很濕滑|二傳低底盤車勿輕易嘗試

Dec 2024【苗栗泰安】水雲餐廳溫泉民宿♨️🥢⛰️|水雲三星之橫龍山~騰龍山健行|台中西嶼龍新鮮海鮮古早味餐廳

Feb, 2024【台中西區】桃太郎日本料理|隱身巷弄裡的39年老字號無菜單料理|食材新鮮、自然美味

July 2024【台北士林】陽明山彼端的原始秘境|颱風後的鹿角坑生態保護區|循著疊石指引造訪楓林瀑布

【美國加州】此生必去超美風景!加州一號公路自駕遊~Half Moon Bay、17 Mile Drive、Bixby Greek Bridge、Big Sur、McWay Falls、Elephant Seal Rookery

Mar 12, 2022【重機一日遊】走北橫至宜蘭,經梨山、武嶺下埔里,再走台三線回桃園|16小時的半圈環島

【新北市平溪】106縣道上的隱藏版B級美食~平溪古早味料理~鹹湯圓.薑母油飯(想吃還得看運氣)

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *