D-Add Blockstack Auth to a website

FROM : https://docs.blockstack.org/develop/auth_provider.html

本教程將帶領(lǐng)您向web應(yīng)用程序添加Blockstack身份驗證疆前。您構(gòu)建的站點是一個簡單的Rails站點。您不需要任何專門的Ruby或Rails知識來構(gòu)建這個站點。但是袍榆,如果您是一個知識淵博的Rails程序員舍杜,您應(yīng)該能夠輕松地完成或擴展本教程妥畏。

設(shè)置環(huán)境
創(chuàng)建Rails網(wǎng)站
添加一個主頁
安裝OmniAuth和OmniAuth-blockstack gem
為blockstack添加一個OmniAuth回調(diào)
測試blockstack身份驗證

設(shè)置環(huán)境

本教程要求Ruby 2.0或更高版本凹联。要確認安裝了Ruby并確認版本,請輸入以下內(nèi)容:

$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin16]

如果沒有安裝Ruby梧喷,應(yīng)該安裝它。如果希望在工作站上運行多個不同版本的Ruby脖咐,可以使用rvm铺敌。

成功安裝Ruby之后,安裝rails gem屁擅。本教程使用rails版本5.2.1編寫偿凭。您可以使用gem list命令查看gem是否已經(jīng)安裝。要安裝rails gem派歌,請執(zhí)行以下操作:

$ gem install rails

創(chuàng)建Rails網(wǎng)站

1.使用Rails new命令創(chuàng)建一個新的Rails項目:

$ rails new blockstack-rails-example

該命令生成一個項目目錄笔喉。
2.切換目錄到blockstack-rails-example項目目錄。

$ cd blockstack-rails-example

3.使用rails服務(wù)器啟動項目硝皂。

$ rails s
s標(biāo)志是服務(wù)器的別名常挚。

4.在瀏覽器中加載http://localhost:3000地址。
你會看到默認主頁上寫著耶!你在Rails !稽物。

image.png

5.繼續(xù)奄毡,在命令行上輸入CTRL-C來停止服務(wù)器粱甫。

添加一個主頁

在本節(jié)中患蹂,您將為新網(wǎng)站添加一個主頁。為此坛掠,您創(chuàng)建一個名為PagesController的新控制器咪奖,其中包括主頁盗忱。要設(shè)置和測試這個,請執(zhí)行以下操作:
1.使用rails生成主頁羊赵。

$ rails generate controller pages home

這個命令指示rails創(chuàng)建一個控制器名稱頁面趟佃,其中包括方法home。運行后昧捷,你會有一些新的文件:

  • /app/controllers/pages/pages_controller.rb闲昭。這是你用home方法創(chuàng)建的新控制器
  • /app/views/pages/home.html.erb --- 這是rails用來呈現(xiàn)home視圖的模板。

該命令還修改了預(yù)先存在的文件/config/routes.rb和配置您的服務(wù)器靡挥,使其使用home方法路由/pages/home序矩。

2.編輯/config/routes.rb文件以匹配以下內(nèi)容:

Rails.application.routes.draw do

root to: 'pages#home'

For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

end
這段代碼使用to選項調(diào)用根方法,該選項指示rails使用pages控制器中的home方法作為主頁跋破。

3.保存并關(guān)閉/config/routes.rb文件簸淀。
啟動rails服務(wù)器并打開新主頁瓶蝴,您應(yīng)該會看到您的新主頁。

image.png

您可以在/app/views/pages/home.html.erb中找到主頁的源代碼文件租幕。

安裝OmniAuth和OmniAuth-blockstack gem

您將使用OmniAuth插件來設(shè)置blockstack身份驗證舷手。OmniAuth是一個流行的框架,用于將第三方身份驗證與ruby on rails網(wǎng)站集成在一起令蛉。Blockstack提供了一個OmniAuth插件聚霜,OmniAuth- Blockstack,讓您更容易做到這一點珠叔。

1.如果Rails服務(wù)器正在運行蝎宇,請停止它。
2.在項目的根目錄中編輯Gemfile祷安,并添加兩個gem姥芥,一個用于OmniAuth,另一個用于Blockstack插件汇鞭。

gem 'omniauth'
gem 'omniauth-blockstack'

3.保存并關(guān)閉Gemfile凉唐。
4.通過運行bundle Install命令安裝gem。

$ bundle install

為blockstack添加一個OmniAuth回調(diào)

1.在config/ initialalizer /omniauth.rb上創(chuàng)建一個新文件霍骄。

$ touch config/initializers/omniauth.rb

您將使用這個文件來配置OmniAuth gem和Blockstack插件台囱。

2.編輯新的config/initializers/omniauth.rb文件,并添加以下代碼:

Rails.application.config.middleware.use OmniAuth::Builder do
provider :blockstack
end

這將把OmniAuth中間件添加到您的項目中读整,并告訴OmniAuth使用blockstack提供程序簿训。在用戶使用OmniAuth登錄之后,您需要為Blockstack指定一個回調(diào)方法來處理登錄流的其余部分米间。

回調(diào)方法通常是從第三方獲取身份驗證信息强品,保存一些數(shù)據(jù),并通過將信息保存在cookie中將用戶登錄到應(yīng)用程序屈糊。

3.保存并關(guān)閉config/initializers/omniauth.rb文件的榛。
4.編輯/app/controllers/pages_controller.rb文件
這個文件定義了一個PagesController類,您將在其中添加blockstack_callback方法逻锐。完成后夫晌,文件應(yīng)該如下所示:

class PagesController < ApplicationController
def home
end

def blockstack_callback
puts 'in the callback'
blockstack_info = request.env['omniauth.auth']
session[:blockstack_user] = blockstack_info
redirect_to '/'
end
end

put行只是到控制臺的調(diào)試輸出。從env['omniauth]獲取用戶的blockstack信息谦去。慷丽,這是OmniAuth存儲所有身份驗證信息的地方。然后鳄哭,將該信息加載到密鑰blockstack_user下的會話對象中。通過將此信息添加到會話中纲熏,可以將該信息保存到cookie中妆丘,以便稍后引用锄俄。

5.編輯/app/views/pages/home.html.erb文件,并指導(dǎo)用戶使用Blockstack登錄勺拣。
修改HTML如下:

<h1>Pages#home</h1>
<p>Find me in app/views/pages/home.html.erb</p>
<p><a href="/auth/blockstack">Log In with Blockstack</a></p>
<code><%= debug session[:blockstack_user] %></code>

主頁引導(dǎo)用戶使用Blockstack登錄奶赠。<%= debug session[:blockstack_user] %>標(biāo)記告訴rails以易于閱讀的格式輸出變量session[:blockstack_user]。

此頁面創(chuàng)建到路由/auth/blockstack的鏈接药有。默認情況下毅戈,OmniAuth以/auth/:provider的形式向應(yīng)用程序添加路由。當(dāng)用戶訪問該頁面時愤惰,將通過第三方身份驗證流重定向該頁面苇经。

6.保存并關(guān)閉/app/views/pages/home.html.erb文件。
7.編輯config/routes.rb宦言。并配置一個路由來處理blockstack回調(diào)扇单。

Rails.application.routes.draw do
root to: 'pages#home'
get '/auth/blockstack/callback' => 'pages#blockstack_callback'

For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

end

get行告訴服務(wù)器,當(dāng)用戶訪問/auth/blockstack/callback時奠旺,調(diào)用blockstack_callback方法蜘澜。默認情況下,當(dāng)用戶從第三方登錄返回時响疚,OmniAuth會將用戶重定向到/auth/:provider/callback鄙信。

8.保存并關(guān)閉config/routes.rb文件。

測試blockstack身份驗證

1.啟動rails服務(wù)器忿晕。

$ rails s
您應(yīng)該看到以下內(nèi)容:

image.png

2.單擊帶有Blockstack鏈接的Log In装诡。


image.png

該連接將您帶到blockstack


image.png

3.使用Blockstack web應(yīng)用程序登錄。
有關(guān)使用blockstack標(biāo)識創(chuàng)建或登錄的信息杏糙,請參見使用blockstack標(biāo)識慎王。當(dāng)你用你的身份完成登錄后,你會被重定向回你的主頁:


image.png

此時宏侍,blockstack信息存儲在會話中
如果希望進一步開發(fā)應(yīng)用程序赖淤,可以使用標(biāo)準(zhǔn)的注銷來完成會話。您要注銷的代碼將調(diào)用session[:blockstack_user] = nil來銷毀blockstack信息谅河。

結(jié)論

恭喜你!您已經(jīng)成功地將blockstack身份驗證集成到網(wǎng)站中≡酆担現(xiàn)在,您可以構(gòu)建一個功能齊全的rails應(yīng)用程序绷耍,它能夠使用Blockstack來進行去中心化的用戶身份驗證吐限。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市褂始,隨后出現(xiàn)的幾起案子诸典,更是在濱河造成了極大的恐慌,老刑警劉巖崎苗,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狐粱,死亡現(xiàn)場離奇詭異舀寓,居然都是意外死亡,警方通過查閱死者的電腦和手機肌蜻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門互墓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒋搜,你說我怎么就攤上這事篡撵。” “怎么了豆挽?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵育谬,是天一觀的道長。 經(jīng)常有香客問我祷杈,道長斑司,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任但汞,我火速辦了婚禮宿刮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘私蕾。我一直安慰自己僵缺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布踩叭。 她就那樣靜靜地躺著磕潮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪容贝。 梳的紋絲不亂的頭發(fā)上自脯,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音斤富,去河邊找鬼膏潮。 笑死,一個胖子當(dāng)著我的面吹牛满力,可吹牛的內(nèi)容都是我干的焕参。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼油额,長吁一口氣:“原來是場噩夢啊……” “哼叠纷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起潦嘶,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涩嚣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缓艳,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡校摩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年看峻,在試婚紗的時候發(fā)現(xiàn)自己被綠了阶淘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡互妓,死狀恐怖溪窒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冯勉,我是刑警寧澤澈蚌,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站灼狰,受9級特大地震影響宛瞄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜交胚,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一份汗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝴簇,春花似錦杯活、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至互拾,卻和暖如春歪今,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背颜矿。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工寄猩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人或衡。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓焦影,卻偏偏與公主長得像,于是被迫代替她去往敵國和親封断。 傳聞我的和親對象是個殘疾皇子斯辰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容