2018, Feb 21【北アルプス 乗鞍岳 厳冬期】Mt.乗鞍スノーリゾート ピストン☆日帰り雪山登山♨

圖片
2018年的農曆過年期間,和山友Bryan兄前往日本乗鞍岳和八ヶ岳山域進行雪季登山訓練。
2月19日晚上抵達羽田機場,乘坐高速巴士到新宿,晚上住宿在去年住宿過的旅館“新宿ビジネスホテル”,隔天早上9點出門,到中央東口附近的一蘭拉麵吃早餐,然後前往バスタ新宿(巴士總站),搭乘10點50分的高速巴士前往松本bus terminal。先去便利商店買些行動糧,然後乘坐上高地線電車前往“新島々駅”,然後再轉搭公車前往“乗鞍スキー場前”,晚上住在Ski Resort旅館街的天然溫泉旅館“なごみ湯 白樺”。
隔天早上吃完早餐,早上9點步行到滑雪場的リフト乗り場,乘坐3次リフト抵達かもしかリフト最上部(標高約1,970m的ツアーコース開始点)。夏季時,觀光客可以搭乘巴士直接抵達標高2,702m的畳平(乗鞍 bus terminal),但冬季公路早已被積雪覆蓋,這裡是冬季前往乗鞍岳最便利的登山口。
稍微整理一下登山裝備,早上9點50分啟程出發,稍早查看天氣預報,今天的天氣是多雲午後轉陰的天氣,因此從一開始就不抱持任何期待可以看見美麗的山景。從ツアーコース開始点出發後,雖然沿途足跡都很明顯,但沿路都是鬆雪,沒有買スノーシュー穿,每個步伐都走的相對費力,當下突然有點懊惱,但雖然如此,還是不影響行進的步調。
在沒有スノーシュー的狀態下,持續和鬆雪奮鬥了一個多小時,上午11點30分到達“ツアーコース終点 ”,這裡是分別前往“肩ノ小屋”和“位ヶ原山荘”的岔路口,位ヶ原山荘冬季有營業,如果安排2天1夜的行程,可以在那裡住宿一晚,但住宿必須事前預約。我們取直行繼續朝向肩ノ小屋前進。從岔路口開始,雪地上已經沒有明顯的足跡,天候也隨著時間逐漸變差,視野完全被濃霧所遮蔽,眼前只剩下一片白色,能見度大約只有10公尺,因此不時需要依賴GPS裝置來確認方向。
中午12點50分經過“大雪溪避難小屋”(當下以為這就是肩ノ小屋,後來回家查看地圖才知道並不是),小屋的入口處已經被封死,無法進去小屋取暖,只能站在小屋外吃點糧食補充水份。這時的溫度差不多有零下10幾度,加上風寒效應,手套一拿下來,手指頭瞬間失去知覺,後來發現小拇指有輕微凍傷。在這邊小休息10分鐘左右,繼續靠著GPS往山頂方向前進。
Bryan選了一條捷徑,走沒多久我就覺得奇怪,按常識來判斷,這種深雪和極陡的坡度,直覺就不是正常的登頂路線,後來回家查看…

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封信(全文)

2018, June 11~16【泰北♡清萊】Travel to Chiang Rai, Northern Thailand (4th visit to Thailand)

September, 2012 白姑大山二天一夜~其實沒那麼累,只是路途遙遠

[平成28年11月24~29日]秘湯・絶景の家族旅行🍁🍁 奈良・和歌山2016秋/吉野山・洞川温泉・みたらい渓谷・瀞峡・湯の峰温泉・熊野古道

[平成28年9月11~16日]生命の息吹と太古の大自然に魅せられる、世界遺産屋久島2泊3日テント担いで縦走♪(淀川登山口~白谷雲水峡)

2013.5.25~26【新阿溪縱走】眠月線鐵道線探勘。順登松山、萬歲山、小笠原山、對高岳

[平成26年7月12日~13日]夏雲湧く北アルプスへ!白馬大雪渓から白馬三山テント泊縦走と鑓温泉~お花畑と雲上の温泉が待ってます!(白馬岳、杓子岳、白馬鑓ヶ岳)

文章列表