Sep 2024 晚夏的黑部源流4泊5日山旅 PART ①【溪流登攀&溫泉三昧】赤木沢~五郎沢~祖父沢遡行&雲ノ平~高天原~裏銀座縱走(旅途的開始)

圖片
今年晚夏的山旅,我前往了日本北阿爾卑斯山脈黑部源流域進行為期五天四夜的溪流登攀+登山縱走行程。黑部川源流一帶的山域,雖然過去幾年已造訪過多次,不過這回是第一次在日本進行溪流登攀(日本叫「 沢登り 」),而且是在我特愛的黑部川流域,讓我對黑部源流域有了更進一步的認識。 此行也順路造訪了五年前就計畫要去,但是因爲颱風而沒能去成的「 雲ノ平 」,以及有「 日本第一遠的溫泉 」之稱的秘湯「 高天原溫泉 」泡湯。然後還走了去年因為天氣惡劣而沒能走的「 裏銀座縱走路線 」下山,完成這趟縱橫黑部源流域,總距離50幾公里的溪流登攀和登山旅行。 黑部川 (日語:黒部川/くろべがわ)是日本富山縣東部的一級河川,為黑部川水系的本流,它被列為富山縣的七大河流之一,其他六條河流分別是片貝川、早月川、常願寺川、神通川、莊川和小矢部川。 黑部川 大部分蜿蜒於深山內,形成十分陡峭的黑部峽谷,如果想親身感受黑部峽谷的壯闊,走一趟 下ノ廊下 和 水平步道 ,絕對是畢生難忘的體驗。 下圖為黑部川水系流域的示意圖,從海拔2924米的 鷲羽岳 降下的的最初的一滴水,流經 奧ノ廊下 、 上ノ廊下 、 下ノ廊下 ,並匯聚了黑部山區眾多支流的溪水後,向北奔流而下,然後流入富山灣,最後進入日本海。 下圖是這趟山旅所進行的溪流登攀(沢登り)的區域,包括 赤木沢 、 五郎沢 、 祖父沢 等黑部川支流,主要位於黑部川的源頭,尤其是赤木沢,更有著「 日本第一美溪 」之稱號。 黑部源流…這幾個字對登山者來說有著特殊的魔力。人跡罕至的秘境,峽谷綿延的 上ノ廊下 ,激流沖刷岩石的 下ノ廊下 ,源頭的雲ノ平瑞士庭園等。在這黑部源流的一隅,一條溫柔的小溪緩緩流入。赤木沢與黑部川本流交匯處的絕美景色,展現了大自然鬼斧神工的美麗,在陽光照耀下的溪流和深潭,呈現出豐富的色彩變化,其美景宛如天國一般。 下圖是我這趟五天四夜的山旅,所行經過的整個路線(使用 YAMAP 紀錄),從富山縣的 折立登山口 入山,溯行黑部源流域的多個溪流(黑部川上游的支流),並順訪 雲ノ平 和 高天原溫泉 後,再走 裏銀座縱走路 ,由高瀨湖下山,總距離約53.6公里(不過在 Sports Tracker 上面的紀錄卻是63.3公里,不知道哪個才是正確的)。 這趟山旅的途中,依序住宿 藥師沢小屋 、 黑部五郎小屋 、 雲ノ平山莊 、 水晶小屋 ,這些都是以前沒有住過...

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

熱門文章

Jul 2025【新北雙溪】十年荒徑重見天日!雙溪二柑O型健行🍊(威惠廟~柑腳城山~柑腳山~崩山坑古道)

Jan 2025【日本東北】溫泉三昧之旅② 在大雪飄落的雪國,追尋秘湯之宿與極上美食(仙台~品嚐極上米澤牛&奧羽的百年藥湯-鎌先溫泉)

日本の登山の歷史

Jan 2025【苗栗三義】富貴牡丹(三義館)人文藝術餐廳|預約制|在美術館裡吃無菜單料理

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

May 2023【雲林古坑】 負離子濃度達都市40倍/漫步木馬古道/順訪雲嶺之丘/山合苑喝咖啡/秋田犬

Sep 2024 晚夏的黑部源流4泊5日山旅 PART ①【溪流登攀&溫泉三昧】赤木沢~五郎沢~祖父沢遡行&雲ノ平~高天原~裏銀座縱走(旅途的開始)

Jun 2025【彰化員林】月光山舍土雞料理景觀餐廳(寵物友善餐廳)|員林藤山步道散步

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

2019, July 7~8【中國山東】老司機帶你攀登72位古代帝王曾登臨朝拜,以五嶽獨尊名揚天下的泰山(歷史典故+遊覽路線+遊記+照片)

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *