【南投信義】丹大林道與消失的省道台16線|可徒步深入中央山脈的經典長程林道

圖片
布農族人有這麼一句話:「濁水溪的上游,不是終點,是我們布農文化的起源」,這句話揭開 丹大林道 的旅行序幕。下面是幾年前,丹大林道還沒被媒體大肆報導前,我曾在某個冬季前往安靜的丹大林道徒步健行和野營,以及在工寮過夜的三天兩夜重裝健行紀錄。 2024.01.31更新:合流坪的鋼便橋已於今日被台電撤除了 連結: 台電施工後丹大林道「恢復」通行! 拆橋挖巨溝「車輛恐無法通過」 丹大地區 位於臺灣本島中部之濁水溪上游,行政區隸屬於南投縣信義鄉,為全國面積第二大的鄉鎮。丹大地區也是濁水溪的發源處。東側翻過中央山脈可達花蓮,南鄰玉山國家公園,西接日月潭國家風景區,北側則與仁愛鄉相接。 潭南、雙龍、地利及人和四村等區域皆位於信義鄉,著名的 丹大(孫海)林道 便位於地利村中,沿著步道往東至花蓮邊界處可與七彩湖相接。其中地利村及雙龍村面積最大,合佔本區約七成面積,人和村次之,面積最小者為潭南村 。 丹大林道周邊地圖 丹大林道路徑示意圖 日治時期西元1943年,原本預計將東部花蓮木瓜溪流域附近的水力發電廠所生產的剩餘電力運輸到西部,但因為日本在1945年戰敗後,計畫就宣告中止,1948年台灣工業急速發展,用電量大增,直到1950年獲得美國援助執行了能高路線全長45公里的69kV東西向輸電計畫。 之後為了解決花東地區電力供應問題,台電於1985年開始研究新東西輸電之路線,最後決定自南投明潭發電廠與大觀第二發電廠輸送電力至花蓮鳳林超高壓變電所,此新東西輸電線於1990年開始辦理路線中心測量,1998年完工,全長72.4公里。 沿線共有196座電塔,線路橫跨中央山脈海拔2925公尺的崇山峻嶺,並在「 七彩湖 」附近的越嶺處設有「 光華復旦 」紀念碑,西以 丹大林道 、東以 萬榮林道 為維修保線道路。 丹大林道是深入丹大地區的重要通道,1958年(民國47年),出生於現今雲林縣口湖鄉的孫海,標得林務局巒丹大事業區第八林班地檜木原始林採伐權及伐木後的重新造林權,為了進入深林,孫海沿著原本的山徑開闢出可以卡車通行的丹大林道,因此丹大林道也被稱為「 孫海林道 」。 當年為了闢築林道與運輸需要,孫海建造了一座木橋於合流坪橫跨濁水溪,之後改為水泥橋,這座橋就是著名的「 孫海橋 」。 為了伐木業而開闢的丹大林道,其終點一開始並不是在七彩湖,後半段到光華復旦碑約12公里路段,是台電為了興建東西線輸電工程,才於

Using Google OAuth with Youtube in your Rails Sites

OAuth allows the user to securely share data from provider sites (in this case google) to consumer sites (in this case your ruby on rails site). You can use OAuth to authenticate users or consume API’s on their behalf. Here we will have a look at both.

下面是實作Google OAuth驗證透過Youtube帳號登入Rails Website之過程,整個實作過程是建立在一個現有的Rails Project上(基本條件是必須包含現有的user record和登入/登出系統以及帳號管理機制)。ps. 如果你需要一個現成的Ruby on Rails使用者登入/註冊機制,我認為Authlogic是一個不錯的選擇。

About Authlogic:
http://www.binarylogic.com/category/my-projects/authlogic/
Authlogic Gem download:
http://github.com/binarylogic/authlogic/
Authlogic Example Project on Github:
http://github.com/binarylogic/authlogic_example/

在實作之前,首先我們需要到Google註冊頁面添加你的網域並驗證:
https://www.google.com/accounts/ManageDomains


我們可以使用RSA key來作為signature method,在*NIX或OS X平台上我們可以用openssl來產生RSA Keys(將www.example.com改成你的域名):
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj '/C=US/ST=CA/L=San Francisco/CN=www.example.com' -keyout rsakey.pem -out rsacert.pem

Generating a 1024 bit RSA private key
.........++++++
.................++++++
writing new private key to 'rsakey.pem'

若要定義簽章方式,只需要在OAuth::Consumer instance中加入:signature_method和:private_key_file這兩個參數:用來分別定義簽章方式以及Private Key的存放路徑即可,此外還要記得require 'oauth/signature/rsa/sha1'。接下來將產生的rsacert.pem檔案上傳至Google的Manage Domains註冊頁面,然後我們可以將這兩個檔案複製到#{RAILS_ROOT}/config目錄下。

我們可以在#{RAILS_ROOT}/config/environment.rb中設定環境變數:

這是因為我們在Google註冊頁面將OAuth驗證的Callback地址設為http://www.example.com/authsub,而我們要將這個authsub方法放在users_controller中。

然後安裝oauth gem套件(我用的是0.4.0版本)和nokogiri gem套件,因為我們稍候會用到Nokogiri來解析Youtube傳回的XML內容:
$ sudo gem i oauth
$ sudo gem i nokogiri

最後我們要在User資料表中添加幾個欄位(youtube_username和oauth_token以及oauth_secret):
$ script/generate migration AddGoogleOauthToUsers

編輯遷移檔db/migrate/xxxxx_add_google_oauth_to_users.rb:

然後執行$ rake db:migrate新增欄位,之後我們可以給Users資料表新增一組youtube_username欄位的索引:


如果你要在網站上添加OAuth驗證機制,你應該真正了解OAuth的運作機制,如果只是複製這些程式碼到你的網站上讓它運作,將來你的網站可能會出問題!你可以到下面網址了解OAuth的運作方式。

Beginner’s Guide to OAuth:
http://hueniverse.com/oauth/

下面是Google OAuth運作機制的簡易流程圖:


下面是Google OAuth的運作機制,以Youtube服務為例:

Step1. The Request Token

首先我們需要一個OAuth::Consumer instance,它需要知道我們要和哪個網站溝通,以及該網站的Token-Services地址。我們將從這個instance中的get_request_token方法來獲取Request Token,此外Google還定義了一個scope參數來讓我們指定需要存取的Google服務。這邊我們要使用的是YouTube Data API,因此我們將scope參數設定為http://gdata.youtube.com即可。

Google服務列表請參考下面網址:
http://code.google.com/intl/zh-TW/apis/gdata/faq.html#AuthScopes

Step2. Authorize the Request Token

當使用者參考到request_token.authorize_url時,將會被導向Youtube的登入頁面(如果使用者尚未登入Google帳號),接下來使用者會被要求授權給應用程式。當使用者按下"允許授權"後,將會產生一個Authorized Request Token,接著Google服務(eq.Youtube)會傳遞一個oauth_verifier參數給我們應用程式的Oauth Callback(在我們的例子中是/authsub)來產生Access Token。之後我們就能利用這個Request Token來透過Youtube Data API存取使用者在Youtube網站上的個人資料。

Youtube (Google) 帳戶登入頁面:


授權應用程式頁面:


關於Youtube Data API請參考:
http://code.google.com/apis/youtube/getting_started.html#data_api

Step3. Time for coding!

首先在Application Controller中新增下面兩個方法:


然後在Users Controller新增下面的方法:


接著我們在User Model的password_required?方法添加下面內容,這是用來告訴資料庫當使用者是透過Google帳號註冊時,在建立新的User Record時不需要去驗證密碼欄位:


然後新增一個方法,用來在以後判斷某位使用者是否有Youtube帳號:


接下來修改/app/views/users/new.html.erb視圖,讓透過Google OAuth註冊帳號的使用者不需要填寫密碼設定欄位,因為他們日後可以透過Youtube帳號登入我們的網站:


然後同樣需要修改users/edit.html.erb視圖,讓透過Google OAuth驗證登入網站且尚未設定過密碼的使用者在設定密碼時不用填寫"現有密碼"欄位,因為他們的密碼是空的:


然後可以新增下面的內容,讓還沒有登入Youtube帳號的使用者可以連結至他們的Youtube帳號:


最後我們可以在Controller裡面對需要的Method添加 before_filter :load_oauth_user 來載入Application Controller裡的load_oauth_user方法。然後在特定的方法中加入下面內容:


Step4. What's next?

因為Access Token本身不會自動失效,除非使用者從Youtube網站上撤銷它,因此我們可以將使用者的Access Token存放在資料表中,之後當使用者透過Youtube帳號登入或是登入的使用者已經連結過Youtube帳號,我們就可以藉由Access Token在我們傳送給Youtube的HTTP Request中包含所需的authorization headers 而進一步從Youtube API來取得使用者的資料,例如可以再往站上顯示使用者的播放清單,上傳的影片,以及Youtube上面的好友列表等等。


參考資料:

Developer's Guide: Data API Protocol – OAuth for Web Applications
http://code.google.com/intl/zh-TW/apis/youtube/2.0/developers_guide_protocol_oauth.html

Google Data on Rails
http://code.google.com/intl/zh-TW/apis/gdata/articles/gdata_on_rails.html

Using Google OAuth in Ruby on Rails Sites
http://www.manu-j.com/blog/add-google-oauth-ruby-on-rails-sites/214/

Ruby, OAuth & YouTube
http://runerb.com/2010/01/12/ruby-oauth-youtube/

Youtube API
http://code.google.com/apis/youtube/overview.html

Using OAuth with the Google Data APIs
http://code.google.com/intl/zh-TW/apis/gdata/articles/oauth.html

熱門文章

[轉載] 洛克菲勒寫給兒子的38封信(全文)

【南投信義】丹大林道與消失的省道台16線|可徒步深入中央山脈的經典長程林道

May 2023【台中南屯】地雷店食記|森鐵板燒|用餐體驗差,價格超貴卻豪無價值。小心別踩雷!!!

淺談 Gemini Pro (和 Vision) 多模態 AI 模型與生成式 AI 應用:在 Android 應用程式中使用 Gemini Pro 的心得與感想

【美國加州】加州一號公路自駕遊~Half Moon Bay、17 Mile Drive、Bixby Greek Bridge、Big Sur、McWay Falls、Elephant Seal Rookery

Jun 24~25, 2022【南橫三星】庫哈諾辛山+【南臺首嶽】關山(進涇橋登山口)|2天1夜野營登山

Aug, 2023【桃園大溪】桃園小百岳編號23-溪洲山步道|適合訓練腳力、還能觀賞石門水庫的山水景色

Nov 2023【新北貢寮】山海相伴的雪山尾稜北段健行(福隆~石城)|秋天可欣賞芒草山稜與大海交織而成的美景

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

Sep, 2023【桃園龍潭】輕鬆登頂石門山欣賞石門水庫湖光山色|景春步道+小竹坑古道O型路線午後健行

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *